les chaînes de passer par référence en C

J'ai de la difficulté à comprendre comment les chaînes de passer en arrière à travers les paramètres d'une fonction. Je suis nouveau en programmation, donc j'imagine que c'est probablement une question de débutant. Toute aide que vous pourriez donner le plus apprécié. Ce code seg défauts, et je ne sais pas pourquoi, mais je donne mon code pour montrer ce que j'ai jusqu'à présent.

J'ai fait un wiki de la communauté, alors n'hésitez pas à modifier.

P. S. C'est pas devoirs.

C'est la version originale

#include <stdio.h>

#include <stdlib.h>
#include <string.h>

void
fn(char *baz, char *foo, char *bar)
{
     char *pch;

     /* this is the part I'm having trouble with */

     pch = strtok (baz, ":");
     foo = malloc(strlen(pch));
     strcpy(foo, pch);

     pch = strtok (NULL, ":");
     bar = malloc(strlen(pch));
     strcpy(bar, pch);

     return;
}

int
main(void)
{
     char *mybaz, *myfoo, *mybar;

     mybaz = "hello:world";

     fn(mybaz, myfoo, mybar);

     fprintf(stderr, "%s %s", myfoo, mybar);
}

Mise à JOUR Voici une version mise à jour avec quelques-uns des suggestions de mise en œuvre:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXLINE         1024

void
fn(char *baz, char **foo, char **bar)
{
     char line[MAXLINE];
     char *pch;

     strcpy(line, baz);

     pch = strtok (line, ":");
     *foo = (char *)malloc(strlen(pch)+1);
     (*foo)[strlen(pch)] = '\n';
     strcpy(*foo, pch);

     pch = strtok (NULL, ":");
     *bar = (char *)malloc(strlen(pch)+1);
     (*bar)[strlen(pch)] = '\n';
     strcpy(*bar, pch);

     return;
}

int
main(void)
{
     char *mybaz, *myfoo, *mybar;

     mybaz = "hello:world";

     fn(mybaz, &myfoo, &mybar);

     fprintf(stderr, "%s %s", myfoo, mybar);

     free(myfoo);
     free(mybar);
}
pour votre strtok erreur de regarder ma suggestion ci-dessous

OriginalL'auteur |