为什么我的代码不能使用sprintf和fopen打开一个新文件?
int main()
{
int size = 512, i = 1;
char buffer[1000];
char *newFileTemp;
char const *chunk = "Chunk";
memset(buffer, 0, sizeof(buffer));
FILE *fb;
FILE *fp=fopen("blah.txt", "r");
if (fp == NULL)
{
perror("doesnt exist");
return 0;
}
fread(buffer,sizeof(char),sizeof(buffer), fp);
sprintf(newFileTemp, "%s%i", chunk, i);
printf("blah check %s",newFileTemp);
fb = fopen(newFileTemp, "wb");
if (fb == NULL)
{
perror("doesnt exist");
return 0;
}
fwrite(buffer, sizeof(char), sizeof(buffer), fb);
fclose(fp);
fclose(fb);
return 0;
}
我试图用sprintf创建一个名为chunk1的文件,它有文件blah.text(blah.txt已经创建)的数据。但即使代码编译正确,它也不会创建一个新文件。请帮忙。为什么我的代码不能使用sprintf和fopen打开一个新文件?
您遇到的问题称为undefined behaviour,因为您在初始化之前使用的是newFileTemp
。要解决此问题,初始化这样的:
newFileTemp = (char*)malloc(100);
或声明它是这样的:
char newFileTemp[100];
的原因是sprintf
预计newFileTemp
有被分配用于存储被格式化字符串足够的空间(它不会为你分配)。
另外:
这是C:没有'new'。 –
谢谢,没有注意到他把它标记为C. Fixed。 – MondKin
我必须严格意义上同意这一点,但通过引入未定义的行为角度,它似乎埋葬了关键点,即'sprintf()'不仅仅要求其第一个参数是'char * ',但它要求它是一个指向[现有的'char'数组的大小足以接收“打印”数据的指针。 'sprintf()'不仅*不分配空间并将其分配给指针,它*不能*。 –
如果你解释了它的功能,那将会很棒。 – nicomp
请使用'snprintf()'而不是'sprintf()'。 (在这种情况下,它可能指出你没有缓冲区大小来给它...) –