簡體   English   中英

以下C代碼是否安全?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM