[英]fgets() causing segmentation fault
在大學里,我正在學習進程之間的通信,我有這個練習,我必須通過管道將父進程鏈接到子進程,子進程運行 cmd sort fx.txt
並將輸出發送給父進程,父進程應該打印。
fx.txt
的內容是
b
a
經過一番搜索,發現popen()
是一個不錯的選擇,下面是我寫的一些示例代碼:
#include <stdio.h>
#include <unistd.h>
#define SIZE 255
int main() {
FILE *file;
char *cmd = "sort fx.txt";
file = popen(cmd, "r");
if (file == NULL) {
printf("error opening pipe\n");
return 1;
}
char *str;
//print sorted lines
while (fgets(str, SIZE, file) != NULL) {
printf("%s", str); // \n already stored in str
}
pclose(file);
return 0;
}
我在fgets()
行上遇到分段錯誤。 之后,我隨機嘗試通過創建另一個指針並將fgets()
的返回值分配給它來修復它。
變化如下:
char *str;
char *s;
//print sorted lines
while ((s = fgets(str, SIZE, file)) != NULL) {
printf("%s", str); // \n already stored in str
}
它起作用了,輸出是:
a
b
如果有人可以向我解釋這種行為,我將不勝感激。
char *str;
是一個未初始化的指針。 當你用它作為參數調用fgets
時,你會導致未定義的行為。 分配一些實際空間並使用它:
char str[MAX_LINE_LENGTH];
其中MAX_LINE_LENGTH
對您的程序MAX_LINE_LENGTH
是合理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.