【发布时间】:2015-11-20 12:39:56
【问题描述】:
我的结构定义如下:
typedef struct node {
char * word;
int wordLength;
int level;
struct node * parent;
struct node * next;
}Node;
我正在尝试创建上述结构的链接列表,其中“word”是从文件中读取的字符串。下面是我用来创建列表的函数。似乎工作正常,并将单词打印出来,但是当我尝试在main() 中打印出来时,它什么也打印不出来。
void GetWords(char * dictionary, Node * Word, Node * Start)
{
FILE *fp;
char * currentWord = (char *)malloc(sizeof(char));
fp = fopen(dictionary, "r");
ErrorCheckFile(fp);
if(fscanf(fp, "%s", currentWord) == 1){
Start = Word = AllocateWords(currentWord);
}
while((fscanf(fp, "%s", currentWord)) != EOF){
Word->next = AllocateWords(currentWord);
Word = Word->next;
printf("%s: %d\n", Word->word, Word->wordLength);
}
fclose(fp);
}
我需要返回到列表的开头吗?如果是这样,我该怎么做?在这个函数中,我有“开始”指向文件中的第一个单词,我需要这个吗? 我正在尝试打印它们,以确保文件正确存储在列表中。
我的 main() 函数是:
int main(int argc, char ** argv)
{
Node * Word = (Node *)malloc(sizeof(Node));
Node * Start = (Node *)malloc(sizeof(Node));
GetWords(argv[1], Word, &Start);
printf("Start: %s\n", Start->word);
printf("Word: %s\n", Word->word);
while(Word->next != NULL){
printf("%s\n", Word->word);
}
return 0;
}
打印语句只是在那里检查列表是否正在打印。就目前而言,Start->word 正在打印文件中的最后一个单词,而 Word->word 正在打印 (null),while 循环根本没有执行。
我的 AllocateWords() 函数如下:
Node * AllocateWords(char * string)
{
Node * p;
p = (Node *)malloc(sizeof(Node));
if(p == NULL){
fprintf(stderr, "ERROR: Cannot allocate space...\n\n");
exit(1);
}
p->word = string;
p->wordLength = strlen(p->word);
p->parent = NULL;
p->next = NULL;
return p;
}
【问题讨论】:
-
sizeof(char)为 1,存储字符串的空间非常小。 -
还有
Word和Start是局部变量的问题。您对它们所做的更改将不会在调用GetWords的函数中重新显示。
标签: c string pointers linked-list file-read