2016-09-06 85 views
-1

我問這個早些時候here爲什麼我使用strcpy()函數時輸出空並且不爲空?

這個問題之前就已經完成了,但我用strcpy()功能時仍然混淆,沒有輸出。

此代碼段:

void push(char* nm, char* np, char* tel) { 
if(stackMhsbaru.size != 10) { 
stackMhsbaru.nama[stackMhsbaru.size + 1] = nm; 
stackMhsbaru.npm[stackMhsbaru.size + 1] = np; 
stackMhsbaru.telp[stackMhsbaru.size + 1] = tel; 
stackMhsbaru.size++; 
} 
} 

上述代碼時編譯正常,沒有錯誤,則輸出是:

--------------------------- 
nama = Febri 
npm = 067015021 
telp = 08877 
--------------------------- 

我與改變:

void push(char* nm, char* np, char* tel) { 
if(stackMhsbaru.size != 10) { 
if(!nm)strcpy(stackMhsbaru.nama[stackMhsbaru.size + 1],nm); 
if(!np)strcpy(stackMhsbaru.npm[stackMhsbaru.size + 1],np); 
if(!tel)strcpy(stackMhsbaru.telp[stackMhsbaru.size + 1],tel); 
stackMhsbaru.size++; 
} 
} 

上面的代碼當編譯正常時,沒有錯誤但輸出是:

--------------------------- 
nama = 
npm = 
telp = 
--------------------------- 

爲什麼?沒有人能解釋?

+0

刪除那些塊中的'!'s –

+0

請記住,C語言允許使用空格來使程序可讀。 'if(!nm)strcpy(stackMhsbaru.nama [stackMhsbaru.size + 1],nm);'比較難讀。 –

回答

1

此:

if(!nm) 

可以讀「如果沒有nm非零」,即,如果nm是假的,它只能是如果它是NULL它只是真實的。

您不顯示如何調用該函數,但將NULL指針作爲strcpy()的第二個參數給出未定義的行爲。

你的意思

if(nm != NULL) 

注意,這也更加明確,並(在我看來,雖然這裏的主體的海洋)更加清晰。如果你不是一個有經驗的C程序員,我會說使用明確的比較是個好主意。

+0

謝謝你回答先生:)),我現在明白了。 –

相關問題