为什么我的代码无法使用 sprintf 和 fopen 打开新文件?
Why wont my code work to open a new file using sprintf and 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 已创建)。但即使代码编译正确,它也不会创建新文件。请帮忙。
您遇到的情况称为 undefined behaviour,因为您在初始化之前使用 newFileTemp
。要解决此问题,请像这样对其进行初始化:
newFileTemp = (char*)malloc(100);
或者这样声明:
char newFileTemp[100];
原因是 sprintf
期望 newFileTemp
分配足够的 space 来存储它正在格式化的字符串(它不会为您分配)。
还有:
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 已创建)。但即使代码编译正确,它也不会创建新文件。请帮忙。
您遇到的情况称为 undefined behaviour,因为您在初始化之前使用 newFileTemp
。要解决此问题,请像这样对其进行初始化:
newFileTemp = (char*)malloc(100);
或者这样声明:
char newFileTemp[100];
原因是 sprintf
期望 newFileTemp
分配足够的 space 来存储它正在格式化的字符串(它不会为您分配)。