C => convertir un char[] en char*

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. 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
    1. Modérateur
      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
      1. 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
        1. Modérateur
          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
          1. 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. 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. 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