您缺少零终止char
-array 以使其能够在打印之前作为字符串处理。
修改您的代码,如下所示:
...
{
char key[18 + 1]; /* add one for the zero-termination */
memset(key, 0, sizeof(key)); /* zero out the whole array, so there is no need to add any zero-terminator in any case */
...
或者像这样:
...
{
char key[18 + 1]; /* add one for the zero-termination */
... /* read here */
key[18] = '\0'; /* set zero terminator */
printf("\n%s", key);
...
更新:
正如我在对您的问题的评论中提到的那样,与使用方式有关的“另一个故事”feof()
是错误的。
请注意,只有在读取 EOF 后才会结束读取循环,以防出现错误或真正的文件结尾。然后将此 EOF 伪字符添加到保存读取结果的字符数组中。
您可能想使用以下结构来阅读:
{
int c = 0;
do
{
char key[18 + 1];
memset(key, 0, sizeof(key));
size_t i = 0;
while ((i < 18) && (EOF != (c = fgetc(src_file))))
{
key[i] = c;
printf("%c", key[i]);
i++;
}
printf("\n%s\n", key);
} while (EOF != c);
}
/* Arriving here means fgetc() returned EOF. As this can either mean end-of-file was
reached **or** an error occurred, ferror() is called to find out what happend: */
if (ferror(src_file))
{
fprintf(stderr, "fgetc() failed.\n");
}
有关此问题的详细讨论,您可能想阅读此问题及其答案。