【发布时间】:2013-07-15 03:44:51
【问题描述】:
我有一个创建结构链表的函数。
struct words {
char * word;
words next;
};
typedef struct words s_words;
typedef words * Words;
我有一个函数可以使用此代码创建我的链表
Words w = NULL; // start of the list
Words t; // temp node
if (t = (Words) malloc(sizeof(s_words))) {
t->word = a_string_created;
t->next = w;
w = t; // Adding at start of the list
}
如果我创建了 printf("%s",t->word) 和 printf("%s",a_string_created),我得到了相同的值。
我的问题是当我尝试从另一个函数中检索 word 时。
int readWords(Words list, char * wordRead) {
if (list != NULL) {
//strcpy(wordRead,list->word);
wordRead = list->word;
return 1;
}
else {
return 0;
}
}
我无法获得readWords 中的值。其中的printf("%s",list->word) 给了我一个奇怪的字符。并来自调用者函数
char rw[11]; //I've try char* rw too
readWords(aList,rw);
printf("%s",rw) 不打印任何内容。
我已经坚持了好几个小时了。肯定有一些我看不到/不理解的东西。
编辑:
我通过用strcpy(t->word, a_string_created); 替换t->word = a_string_created; 部分解决了我的问题现在在我的printfs 上,我打印字符串值。但是对于某些值,该值略有变化,例如:test 变为 uest !!
回答
将t->word = a_string_created; 更改为t->word = strdup(a_string_created);
任何人都可以帮助并向我解释我在哪里以及为什么错了?
【问题讨论】:
-
顺便说一句:你为什么不使用函数的返回值来返回值,而不是愚蠢的1或0?
-
这是学校作业,我无法更改 readWords 的签名。
-
也许可以和你的老师讨论。在我看来,这显然是错误的。返回 NULL 似乎是 not found ) 的一个很好的指示
标签: c linked-list