编辑:Welp看来我修好了......
header[3] = str
strcpy(header[3], str)
这些行在使用printf时产生相同的输出,但显然fprintf只是像strcpy一样。
这是我的代码:
int pgmWrite( const char **header, const int **pixels, int numRows, int numCols, FILE *out )
{
int i, j;
printf("%s\n\n", header[3]);
for(i = 0; i < 4; i++)
fprintf(out, "%s", header[i]);
printf("success in WRITE\n\n\n\n\n");
for(j = 0; j < numRows; j++)
{
for(i = 0; i < numCols; i++)
fprintf(out, "%d ", pixels[i][j]);
fprintf(out, "\n");
}
}
在printf
语句中,header[3]
输出为237.
在fprintf
语句中,header[3]
输出为乱码unicode字符。
如果有人想要我可以添加完整程序的怪物(300行),如果你真的希望看到一切正在做什么......
编辑:这是我的输出错误发生时(所有这些输出都来自上面的函数)
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)
产生错误:./ a.out -E 75 ./baboon.ascii.pgm testBaboon.pgm
答案 0 :(得分:0)
编辑:我之前的例子基于一个char *指针数组,这不是OP的想法(感谢用户 0605002 指出它)。
下面是一个快速示例,概述了该问题的简单测试用例。在memcpy
之后使用malloc
可确保我们拥有有效的内存块,并在以后访问期间防止出现seg-fault。
#include <iostream>
using namespace std;
#define SIZE 8
int main()
{
size_t size = sizeof(char*) * SIZE;
char* test = "Test1234";
char* *header = (char**) malloc(size);
memcpy(header, "0", size);
for(int i = 0; i < SIZE; i++)
{
header[i] = (char*) malloc(size);
memcpy(header[i], "0", size);
}
header[0] = test;
header[1] = "abc";
FILE * pFile;
pFile = fopen("myfile.txt", "w");
for(int i = 0; i < SIZE; i++)
fprintf(pFile, "%s\n", header[i]);
fclose (pFile);
free(header);
return 0;
}