[英]Is the following C code safe?
#include<cstdio>
#include<stdlib.h>
int main()
{
char* ptr=NULL;
printf("%s",ptr);
return 0;
}
它打印(null)作為輸出。 以上是示例代碼。 在實際代碼中,我得到char *作為函數的返回,我希望打印字符串進行日志記錄。 但是,NULL也是該函數的有效返回值,所以我想知道在打印字符串之前是否需要進行空檢查?
char* ptr=someFuncion();
// do i need the following if statement?
if(ptr!=NULL)
{
printf("%s",ptr);
}
我只想確保輸出是相同的,即如果ptr = NULL,那么在所有平台和編譯器上輸出應該是(null),並且上面的代碼(沒有if語句)不會在任何C標准兼容平台上崩潰。
總之,上面的代碼(沒有if語句)標准是否兼容?
謝謝你的幫助和耐心:)
問候
拉利
總之,上面的代碼(沒有if語句)標准是否兼容?
ISO / IEC 9899:1999(C標准文檔)沒有聲明如果ptr
為NULL會發生什么,所以行為是未定義的 。 您使用的庫非常友好,可以為您提供一些有用的輸出(“(null)”)而不是崩潰。
包括對NULL的顯式檢查。
你的意思是這樣的嗎?
char* result = foo (); printf ("result is %s\n", (result ? result : "NULL"));
如果有疑問,你不應該依賴於實現細節並執行額外的(ptr != NULL)
- 這也是很好的編碼實踐。
根據我的經驗,通常你會在沒有if語句的情況下處於清晰狀態,盡管我傾向於避免做出你所說的習慣......這已經很長一段時間了,但IIRC是我曾經使用過的Sun編譯器如果你將一個NULL char *傳遞給printf()會導致部分或全部崩潰,所以包含檢查更簡單,更安全......我打算在使用宏形式的注釋中,但我發現自從我開始打字以來,我在30秒內被其他3人毆打過它:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.