Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fprintf有长度限制吗?_C_Linux_Core - Fatal编程技术网

C fprintf有长度限制吗?

C fprintf有长度限制吗?,c,linux,core,C,Linux,Core,A在Linux版本2.6.32-431.11.2.el6.x86_64中有下一个c ansi代码 fprintf(fpOut, "%s",cBuffer); 其中cBuffer是指向char的指针,如中所示 int bfnAddOutputFile(FILE *fpOut, char *cBuffer){/**/ fprintf(fpOut, "%s",cBuffer); //code return ( TRUE );

A在Linux版本2.6.32-431.11.2.el6.x86_64中有下一个c ansi代码

    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,如果它是什么数字?

cBuffer
可能不包含空终止符,这会使
fprintf
超出内存边界


在输出C字符串时,
printf
-系列函数仅在遇到空终止符(
'\0'
)时停止,否则可以继续,直到它们尝试输出不属于您的程序的内存块,从而导致分段错误

cBuffer
ASCIIZ字符串吗?不清楚为什么会崩溃,因此为什么您认为这是一个长度问题?请参阅此相关文章。您的字符串可能没有以空字节结尾。替换
fprintf(fpOut,“%s”,cBuffer)带有
printf(“%zd\n”,strlen(cBuffer))
并查看错误是否仍然发生。你是说strlen
,@squeamishossifrage?如果是这样,(1)
strlen()
可能会遇到同样的问题,(2)正确的字段描述符应该是
%zx
,而不是
%xd
。虽然不是OP的情况,
[f|s]printf
可以在遇到字符串终止符之前停止(如果给定了字段宽度)。cBuffer太小,所以fprintf中不包含空终止符。@JohnBollinger怀疑您指的是精度,而不是字段宽度。没错,@chux。
printf
-系列函数输出的字符串参数字符数不会超过字段精度,而不是宽度。例如,可以使用如下内容:
fprintf(fpOut,%.255s,cBuffer)