在下面的代碼,當使用時,讀取輸入路徑,讀出在該路徑的文件中的文本,並返回包含從該文件中的所有內容的一個字符串:爲什麼主函數中的段錯誤,而不是外部錯誤?
#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