C 只有在打印时才出现故障
我有一个像这样的循环C 只有在打印时才出现故障,c,segmentation-fault,printf,C,Segmentation Fault,Printf,我有一个像这样的循环 while(condition){ read_some_data(source, buf, BUFSIZE); printf(buf); memset(buf, 0, BUFSIZE+1); //do stuff to affect condition that does not touch buf } buf是大小为BUFSIZE+1的字符数组。奇怪的是,如果我注释掉printf,程序就会完美地执行,没有分段错误。只有当我试图打印出buf时,我才会遇到问
while(condition){
read_some_data(source, buf, BUFSIZE);
printf(buf);
memset(buf, 0, BUFSIZE+1);
//do stuff to affect condition that does not touch buf
}
buf
是大小为BUFSIZE+1
的字符数组。奇怪的是,如果我注释掉printf
,程序就会完美地执行,没有分段错误。只有当我试图打印出buf
时,我才会遇到问题。此外,seg故障不一定发生在循环的第一次迭代中。通常需要6到7次迭代
此外,此程序中没有动态内存分配。您缺少printf的格式说明符参数您缺少printf的格式说明符参数
- 确保
在分配的范围内有一个空(零值)字节。这个空字节是buf
判断它到达字符串末尾的方式;如果没有它,它将在安全的地方继续阅读过去printf
- 确保
不包含任何类似buf
的内容,而%d
可能用于指示其他参数。更好的是-只需使用printf
,即可完全消除此类风险printf(“%s”,buf)
- 确保
在分配的范围内有一个空(零值)字节。这个空字节是buf
判断它到达字符串末尾的方式;如果没有它,它将在安全的地方继续阅读过去printf
- 确保
不包含任何类似buf
的内容,而%d
可能用于指示其他参数。更好的是-只需使用printf
,即可完全消除此类风险printf(“%s”,buf)
buf
是\0
终止的字符串。
只有
printf()
才能打印字符串。确保buf
是\0
终止的字符串。
只有
printf()
才能打印字符串。您需要将字符串指定为打印参数:printf(“%s”,buf)代码>
希望这有帮助!
注意:您需要将字符串指定为打印参数:printf(“%S”,buf)代码>
希望这有帮助!
N.S.是否以null结尾?如果您只想将buf写入stdout,为什么要调用printf(buf)而不是put(buf)?是否以null结尾?如果您只想将buf写入stdout,为什么要调用printf(buf)而不是put(buf)?如果正确使用printf()
会发生什么?i、 e.printf(“%s”,buf)代码>@DanFego我很尴尬。那是我的问题。只要你学到了一些东西,就不必感到尴尬!也就是说,如何使用printf()
,或者如何使用-Wall
,以及如何注意编译器警告:过去20年左右有什么变化吗?我认为,printf(“abc”)代码>将具有与printf(“%s”、“abc”)相同的效果代码>恐怕这只是暂时隐藏了heap@stacker:思考如果buf
包含任何%
字符会发生什么如果正确使用printf()
会发生什么?i、 e.printf(“%s”,buf)代码>@DanFego我很尴尬。那是我的问题。只要你学到了一些东西,就不必感到尴尬!也就是说,如何使用printf()
,或者如何使用-Wall
,以及如何注意编译器警告:过去20年左右有什么变化吗?我认为,printf(“abc”)代码>将具有与printf(“%s”、“abc”)相同的效果代码>恐怕这只是暂时隐藏了heap@stacker:思考如果buf
包含任何%
字符会发生什么情况