C 动态分配内存大小会导致堆栈崩溃错误
情况相当简单,但我不知道为什么缓冲区溢出。我正试图打印出一个文件的内容。将C 动态分配内存大小会导致堆栈崩溃错误,c,file,strcat,C,File,Strcat,情况相当简单,但我不知道为什么缓冲区溢出。我正试图打印出一个文件的内容。将静态int分配给计数是可行的,但是任何查找文件大小的方法都会导致出现此错误并退出程序 来源: char path[] = "upload/"; strcat(path, filename); FILE *file; file = fopen(path, "r"); fseek(file, 0, SEEK_END); int count = ftell(file); printf("%d\n",count); char
静态int
分配给计数
是可行的,但是任何查找文件大小的方法都会导致出现此错误并退出程序
来源:
char path[] = "upload/";
strcat(path, filename);
FILE *file;
file = fopen(path, "r");
fseek(file, 0, SEEK_END);
int count = ftell(file);
printf("%d\n",count);
char *buffer = malloc(count);
fseek(file, 0, SEEK_SET);
fread(buffer, count, 1, file);
printf("%s\n", buffer);
free(buffer);
fclose(file);
任何帮助都将不胜感激 在您的代码中
char path[] = "upload/";
strcat(path, filename);
数组路径
仅为上传
和空终止符分配了空间(即大小)。将此用作strcat()的目标是访问超出范围的内存,这会导致错误
来自(矿山)
strcat()
函数将src
字符串附加到dest
字符串,覆盖dest
末尾的终止空字节('\0'
),然后添加终止空字节。字符串不能重叠,并且dest
字符串必须有足够的空间来显示结果。如果dest
不够大,则程序行为不可预测强>
也就是说
- 返回一个
,您应该相应地更改long
计数的类型
- 在使用返回值之前,应始终检查函数调用的返回值是否成功
char path[] = "upload/";
strcat(path, filename);
数组路径
仅为上传
和空终止符分配了空间(即大小)。将此用作strcat()的目标是访问超出范围的内存,这会导致错误
来自(矿山)
strcat()
函数将src
字符串附加到dest
字符串,覆盖dest
末尾的终止空字节('\0'
),然后添加终止空字节。字符串不能重叠,并且dest
字符串必须有足够的空间来显示结果。如果dest
不够大,则程序行为不可预测强>
也就是说
- 返回一个
,您应该相应地更改long
计数的类型
- 在使用返回值之前,应始终检查函数调用的返回值是否成功
ftell
返回一个长整数。您不能将strcat返回到这样的数组中。您忘记为终止的NUL字符分配一个额外的字节。此外,您没有检查这些函数的返回值。您必须检查fopen
、malloc
、fseek
、fread
等的返回值并对其采取行动。如果您没有,你永远不会有任何线索。ftell
返回一个长整数。你不能strcat
这样的数组。你忘了为终止的NUL字符分配一个额外的字节。此外,你没有检查这些函数的返回值。您必须检查fopen
、malloc
、fseek
、fread
等的返回值并对其采取行动。如果不检查,您将永远不会有任何线索。