Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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的Bug_C_Printf - Fatal编程技术网

C 带有fprintf的Bug

C 带有fprintf的Bug,c,printf,C,Printf,编辑:好吧,看来我已经修好了 header[3] = str strcpy(header[3], str) 使用printf时,这些行产生相同的输出,但显然fprintf只与strcpy类似 这是我的代码: int-pgmWrite(常量字符**头,常量整数**像素,整数行,整数行,文件*out) { int i,j; printf(“%s\n\n”,标题[3]); 对于(i=0;i

编辑:好吧,看来我已经修好了

header[3] = str 
strcpy(header[3], str) 
使用printf时,这些行产生相同的输出,但显然fprintf只与strcpy类似

这是我的代码:

int-pgmWrite(常量字符**头,常量整数**像素,整数行,整数行,文件*out)
{
int i,j;
printf(“%s\n\n”,标题[3]);
对于(i=0;i<4;i++)
fprintf(out,“%s”,头[i]);
printf(“写入成功\n\n\n\n\n”);
对于(j=0;j
printf
语句中,
头[3]
作为237输出

fprintf
语句中,
头[3]
作为乱码unicode字符输出

如果有人愿意,我可以添加怪物,这是完整的程序(300行),如果你真的想看看什么都在做

编辑:这是发生错误时的输出(所有输出都来自上述函数)


要产生错误:./a.out-E 75./baboon.ascii.pgm testBaboon.pgm

编辑:我之前的示例基于char*指针数组,而OP并没有想到这一点(感谢用户0605002指出这一点)

下面是一个简要的示例,概述了该问题的一个简单测试用例。在
malloc
之后使用
memcpy
可以确保我们有一个有效的内存块,并在以后的访问中防止seg故障

#包括
使用名称空间std;
#定义大小8
int main()
{
大小=大小(字符*)*大小;
char*test=“Test1234”;
字符**头=(字符**)malloc(大小);
memcpy(标题“0”,大小);
对于(int i=0;i
没有人想要完整的程序。我们需要一个能重现这个问题的简短程序。当你说“输出是乱七八糟的unicode字符”时,你是如何确定的?(提示,notepad.exe不是确定这一点的可靠方法)如何打开
out
?我们需要查看
FILE*out
的声明,因为给出了明显的乱码输出,这可能是根本原因之一。我打开了两种方法。gedit和(因为我的输出是一个.pgm文件)在照片查看器中。照片查看器无法显示它,当我在gedit中打开它时,“混乱的unicode”只有一行。该行指定文件的最大白色“强度”。如果我在程序的其他地方编辑它,我可以很好地打印出新值,直到我尝试打印到该文件。可能
头[3]
是正常的,
头[0]
等有乱码。您必须发布一个完整的程序来创建乱码,以便其他人可以复制它我得到一个SEGFAULT然后,在该行
if(header[I])
之前添加一个检查,以检查有效内存,并确保在运行该代码之前,您的
header
内容一旦初始化为零。我马上更新我的示例。
*头[I]
不是一个
字符吗?使用
%s
打印
字符
可能是SEGFULT的原因。@0605002不一定。在我上面的测试用例中,完整的字符串“Test1234”被写入文件。@PhilipAllgaier,是的,没错。但是在您的代码中,
header
实际上是指向char的指针的一个数组,因此取消引用
header[i]
将给出一个字符串。但是在OP中的代码中,
header
是指向char的指针,因此不需要取消引用它。其中,
header[i]
是一个字符串(指向char的指针),而
*header[i]
将是一个char。
P2
# baboon.pgma created by PGMA_IO::PGMA_WRITE.
512  512
s· _    .   .
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  
 (plus a couple thousand more zeroes for the rest of the image)