C => convertir un char[] en char*

Friday_XIII -  
 loupius -
Bonjour,
je dois réaliser un petit programme en C, et mon problème est comment transformer un char[] en char*,ou alors concaténer un char* et un char (strcat, ne fonctionnant pas) ....
pourriez vous m'aider s'il vous plait

merci d'avance
Friday
Configuration: Linux
Firefox 3.0.5

5 réponses

  1. azureus33 Messages postés 51 Statut Membre 7
     
    Comment, c'est quoi le problème car un

    char* ... et un char ... [] c'est la même chose.

    Qu'est ce que tu essai de faire qui te pose problème ?
    0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,
    lami20j@debian:~/trash/ccm_c$ cat ccm49_char_pchar.c
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    int main()
    {
            char s1[]="azerty";
            char *s2="uiop";
            char *s3;
    
            s3=(char*)malloc(strlen(s1)+strlen(s2)+1);
            strcat(s3,s1);
            printf("s1 = %s\ts2=%s\ts3=%s\n",s1,s2,s3);
            strcat(s3,s2);
            printf("s1 = %s\ts2=%s\ts3=%s\n",s1,s2,s3);
            return 0;
    }
    lami20j@debian:~/trash/ccm_c$ gcc ccm49_char_pchar.c
    lami20j@debian:~/trash/ccm_c$ ./a.out
    s1 = azerty     s2=uiop s3=azerty
    s1 = azerty     s2=uiop s3=azertyuiop
    
    0
  3. Friday_XIII
     
    c'est bien ce qu'il me semblait, mais j'étais pas sûr XD
    en fait je travail sur la communication de deux processus par l'intermédiaire d'un pipe
    le pere écrit
    le fils lit (char par char)
    et doit appeler une fonction avec ce qu'a lut le fils, mais ça merde un peu :s

    et donc je peux concaténer un char* et un char[] avec strcat alors ?
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    char s1[] = "aaaaa" et char *s2="bbbbb" désignent un tableau de caractères.

    Le nom d'un tableau en C est assimilé à le notion de pointeur et représente l'adresse du 1er élément du tableau.

    Le prototype de la fonction strcat est
           char *strcat(char *dest, const char *src);
    Donc on peut utiliser les noms de tableaux en tant que pointeurs.

    P.S.
    En revanche il y a une différence entre les deux définitions
    char s1[]="aaaa" - s1 est un tableau de taille ajustée pour contenir la suite de caractères "aaaa" et le caractère '\0' qui sont affectés lors de l'initialisation. Il occupera toujours le même espace mémoire

    char *s2="bbbb"
    - s2 est un pointeur initialiser de pointer sur une chaîne constante de caractères. Le pointeur pourra pointé sur n'importe quel autre tableau de caractères
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Friday_XIII
     
    merci pour vos expilcations sur la différence entre un char* et un char[].
    Mais maintenant un autre problème se pose ....
    /*creation d'une relation pere fils à l'aide d'un fork()*/
    //dans le pere
    char[10] tab;
    int i=0;
    while(i<10){
    tab[i]='a';
    }
    //j'ai donc un tableau remplit de lettre a
    //je souhaite l'écrire dans un tube, j'ai fais ça :
    write(tube[1],$tab,10);
    //dans le fils
    char* cle;
    read(tube[0],&cle,10);

    //mais ceci ne marche pas ....
    //avez vous trouvé l'erreur ?
    0
    1. loupius
       
      Je ne sais pas si j'ai trouvé l'erreur... mais j'en ai trouvé une!
      Au lieu d'écrire:
      int i=0;
      while(i<10){ tab[i]='a'; }
      
      j'aurai plutôt mis:
      int i=0;
      while(i<10){ tab[i++]='a'; }
      
      0
    2. loupius
       
      J'en ai trouvé une autre!
      char* cle;
      read (tube[0], &cle, 10);
      Je crains que tu aies un problème d'allocation mémoire!

      Nota: Je tairai le problème du '$tab' qui doit,sans doute, être lu comme '&tab' ;-))
      0