2010-09-10 14 views
1

我寫了一個映射到共享內存位置的代碼,以便第一個程序打開共享內存塊並在其中存儲一些數據。第二個程序讀取共享數據。兩個命令行有什麼區別? (SegFault)

請告訴我兩行命令的區別:

if(argc<2) 
{ 
    printf("USAGE:%s text-to-share\n",argv[0]); 
} 

此代碼給了我一個分割的錯,如果我沒有第二個參數運行它。 但是,當我輸入一些數據時,它工作正常。

2.

if(argc<2) 
    return printf("USAGE:%s text-to-share\n",argv[0]); 

這一個提供我的目的。

但我不明白兩者之間的區別。 我是新手。對我來說,兩者是一樣的,因爲理想情況下它們應該具有相同的輸出。 請幫忙!

回答

1

爲什麼第一statment給你分段故障,您在其中執行程序的C中,它的名字,所以它應該是絕對fine.I我能執行此測試用例正確

int main(int argc,char ** argv){ 
    if(argc<2) 
    { 
     printf("USAGE:%s text-to-share\n",argv[0]); 
    } 
    return 0; 
} 

它輸出:

USAGE:./prog text-to-share 

除非您在此之前執行的代碼中出現錯誤。

+0

我沒有回來0.那是問題所在。謝謝。 +1 – Pavitar 2010-09-10 05:38:01

+1

當出現錯誤(無效參數)時,您不應返回0,因爲0表示成功; @Pavitar,你應該在if語句中返回非零值。 – 2010-09-10 06:09:52

3

兩個顯然一樣:

printf("USAGE:%s text-to-share\n",argv[0]);  // From example 1 
return printf("USAGE:%s text-to-share\n",argv[0]); // From example 2 

第二行裏有第一行不:return語句。

+0

@詹姆斯麥克奈利斯 - 你能告訴我那是什麼嗎? – Pavitar 2010-09-10 05:03:21

+0

@詹姆斯麥克奈利斯 - 但他們兩個都應該做同樣的事情,對嗎?(如果我錯了,請糾正我。) – Pavitar 2010-09-10 05:05:47

+1

@Pavitar,no。由於你沒有在第一個返回,代碼將繼續,仍然取消引用'argv [1]'。另外,返回'printf'的結果並沒有意義。這是輸出的字符數。相反,返回一個固定的錯誤代碼(例如1)。 – 2010-09-10 05:06:30