【发布时间】:2016-10-25 19:12:37
【问题描述】:
A 有下一个 c ansi 代码,在 Linux 版本 2.6.32-431.11.2.el6.x86_64
fprintf(fpOut, "%s",cBuffer);
其中cBuffer是一个指向char的指针,如
int bfnAddOutputFile(FILE *fpOut, char *cBuffer){/**/
fprintf(fpOut, "%s",cBuffer);
//code
return ( TRUE );
}
当它执行 fprintf 时,会生成一个核心转储
Program received signal SIGSEGV, Segmentation fault.
0x00000038b2e6723e in fputs () from /lib64/libc.so.6
有一个最大长度的字符可以发送到 fprintf,如果是这个数字是多少?
【问题讨论】:
-
是
cBufferASCIIZ 字符串吗? -
不清楚你为什么会崩溃,因此你为什么认为这是一个长度问题?
-
您的字符串可能没有以空字节终止。将
fprintf(fpOut, "%s",cBuffer);替换为printf("%zd\n",strlen(cBuffer));,看看错误是否仍然存在。 -
你的意思是
strlen,@squeamishossifrage?如果是这样,(1)strlen()可能会遇到同样的问题,并且(2)正确的字段描述符将是%zx,而不是%xd。