我试图通过提示用户输入四个字符来在文件中放置并获取+打印四个字符。但是,出现错误(致命错误:glibc 检测到无效的 stdio 句柄)。
调试后发现故障出在线路
fputc(c[3], putc)
。第四次提示用户后,无法将第四个字符 c[3] 放入文件中。
请帮助我理解。
这是我的代码:
FILE* putc = fopen("test3.txt", "w");
if(putc == NULL)
{
return 1;
}
char c[4];
for(int i = 0; i < 4; i++)
{
printf("char: ");
scanf("%s", &c[i]);
fputc(c[i], putc);
}
fclose(putc);
FILE* getc = fopen("test3.txt", "r");
if(getc == NULL)
{
return 1;
}
char abc;
while ((abc = fgetc(getc)) != EOF)
{
printf("%c", abc);
}
printf("\n");
fclose(getc);
使用命令
$ gcc -Wall -o foo foo.c
编译的 gcc 版本“Ubuntu 11.4.0-1ubuntu1~22.04”没有遇到错误。你有什么版本的 gcc,你如何调用编译器/链接器?
顺便说一句,我建议为 putc 和 getc 选择不同的变量名,它们都是 C 标准库函数。 来自
man putc
:
putc() 与 fputc() 等效,只是它可以实现为 多次评估流的宏。
来自
man getc
:
getc() 与 fgetc() 等效,只是它可以实现为 多次评估流的宏。
另外,我不会使用 scanf();这通常是一个“坏主意”。请参阅此更安全替代方案的说明。