У меня возникли проблемы с тем, как передать строки обратно через параметры функции. Я новичок в программировании, поэтому я думаю, что это, вероятно, новичок. Любая помощь, которую вы могли бы дать, получила бы большую оценку. Этот код seg неисправен, и я не уверен, почему, но я предоставляю свой код, чтобы показать, что у меня есть до сих пор.передать строки по ссылке в C
Я создал это сообщество wiki, поэтому не стесняйтесь редактировать.
P.S. Это не домашнее задание.
Это оригинальная версия
#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);
}
UPDATE Вот обновленная версия с некоторыми из предложений внедрено:
#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);
}
для вашего strtok segfault посмотрите на мое предложение ниже – ThePosey