2013-05-30 69 views
0

我有一個程序要求用戶輸入兩次。我想使用文件給程序輸入,但不能弄清楚。因爲它要求輸入兩次,我不能管文件的程序,所以這是我嘗試:程序多次請求輸入時使用文件作爲程序輸入

./prog <in1 <in2 

但隨着分段錯誤的程序崩潰。

程序調用該函數兩次:

void print() { 
    char buf[4096]; 

    read(0, buf, sizeof buf); 
    *strchr(buf, '\n') = 0; 
    puts(buf);  
} 

和輸入文件只是有幾個字符在其中。請幫助!

+0

它是如何要求用戶輸入?你在那裏做的管道只是重定向標準輸入,而我實際上不知道如果你指定其中的兩個,會發生什麼:S – slugonamission

回答

0

如果文件in1中沒有\n,那麼strchr將不會有任何東西可以找到,並且會返回NULL

接下來,您的代碼將嘗試取消引用NULL,並導致seg-fault。
這可能是你麻煩的根源。

爲了防止地方\n不存在的情況下,我建議這樣的代碼:

char* p = strchr(buf, '\n'); 
if (p != NULL) { 
    *p = '\0'; 
} 
puts(buf);  

至於從多個文件指導輸入,如果你是在* nix系統上,嘗試這:

./prog < `cat in1 in2` 
+0

謝謝你做到了! – user2438484