当生成4个字符哈希值并将其写入文本文件时,我遇到了一个错误,如果我尝试将哈希值打印到控制台,它只打印文本文件的第一行。奇怪的是,如果我摆脱generateHashTable();
行并通过添加空格或其他内容来编辑文本文件,它会将整个文本文件打印到控制台。我不明白为什么会这样做。
答案 0 :(得分:0)
你的主要问题是:
fwrite("\n", sizeof("\n"), 1, fptr);
fwrite()
会在这里写两个字符,'\n'
和'\0'
,虽然不是不正确,但显然不是你想要的。这将导致文件中第一行以空字符开头后的每一行。当你尝试printf()
那些行时,它会停在该空字符处,因为它认为字符串的结尾是,最终结果是什么都不打印。这就是为什么它只打印出你的第一行。您应该将此行替换为:
fputc('\n', fptr);
其他一些明显的错误:
char *c=malloc(sizeof 5);
几乎肯定不是你想要的。这将分配等于sizeof(int)
的字节数。你需要的是:
char * c = malloc(5);
如果您使用的是32位int
s的系统,请执行以下操作:
c[4] = '\0';
立即为您提供未定义的行为,因为您正在尝试写入四字节内存分配的第五个字节。
然后这个:
if (fptr == NULL)
为什么在完成所有读取和写入文件之后,检查fopen()
是否已成功返回?你应该在之前检查它。
由于您没有显示E()
,fptr
,chunkout
等内容的定义,因此很可能会出现其他明显的错误在没有这些定义的情况下无法确定。