在下面的代码,当使用时,读取输入路径,读出在该路径的文件中的文本,并返回包含从该文件中的所有内容的一个字符串:为什么主函数中的段错误,而不是外部错误?
#include <stdio.h>
#include <string.h>
char* readFile(char *path) {
FILE *fp;
char buff[255];
char *str;
fp = fopen(path, "r");
if(fp) {
while(fgets(buff, 255, fp)) {
strcat(str, buff);
}
fclose(fp);
}
return str;
}
这下的码位是相当同样的事情(修改为不采取任何输入)时,只有它不是在一个单独的文件:
#include <stdio.h>
#include <string.h>
int main() {
FILE *fp;
char buff[255];
char *str;
fp = fopen("test.txt", "r");
if(fp) {
while(fgets(buff, 255, fp)) {
strcat(str, buff);
}
fclose(fp);
}
printf("%s\n", str);
return 0;
}
第二码位,当我运行它,产生一个分割误差。
为什么这些不同?
这就是[** undefined behavior **](http://en.wikipedia.org/wiki/Undefined_behavior)的工作原理。你试着用'str'来做'strcat'。你在哪里为'str'分配内存? – 2014-12-03 21:32:06
我想我通过分配内存不太明白你的意思。我是C的新手,来自JavaScript等高级语言,因此这个术语对我来说是新的。我应该改用'char str []'还是在strcat调用时执行'strcat(&str,buff)'? – SirPython 2014-12-03 23:04:57