【发布时间】:2011-10-23 22:06:48
【问题描述】:
我正在解析一个文本文件,当我遇到.word 这个词时,我想抓住该行的其余部分。这是我目前所拥有的:
char *word_ptr;
if (strstr(token, ":")){
// Some code
}
else if ((word_ptr = strstr(token, ".word"))) {
char *string_wanted = word_ptr + 6;
printf("Rest: '%s'\n", string_wanted);
}
string_wanted 打印不正确。在else-if 语句中分配它时,我对 word_ptr 的使用是否正确? string_wanted 什么也没有打印出来。当我添加 7 而不是 6 时,它会打印出“ize”。我的文本文件中有字大小,但现在我删除了它,我删除了文件并重新创建它并完成了一个干净的构建,但“ize”这个词仍然出现!它根本不存在于文件中,那么它是从哪里来的?我真的很沮丧文件中不再存在“大小”这个词。
这是文件的样子(当我有“ize”这个词时):
array: .word 0:10
array_size: .word 10
现在我刚刚删除了第二行,所以它是:
array: .word 0:10
为什么当我添加 6 时 word_ptr 没有打印出 0:10?我很确定 word_ptr 指向 .word,因为当我打印它时,它会打印 .word。标记线时,array: 正在被标记,所以我知道它正在到达那里。
有什么建议吗?
感谢您的帮助。
【问题讨论】:
-
你尝试过在 strstr 上测试 NULL 吗?
-
我为什么要测试它?代码块不是只有在不为空时才执行吗?
-
是的,这个代码的唯一问题是它永远不会到达 else if(使用您提供的测试用例),当我在我的程序上修复它时,一切都正常工作,请把完整的代码贴上来,你贴的代码没有问题。
-
一天前有人问了一个非常相似(几乎相同)的问题:Using fgets() in file parsing。另外,如果这是家庭作业,请按此标记。
-
“功课”假设再次指责..