2012-10-15 69 views
0

打印空字符串我有以下代碼我如何使用整數

#include<stdio.h> 
#include<string.h> 

int main (void) 
{ 

    unsigned int pqr = 201; 
    unsigned int def = 113; 

    printf("The values are,%u,%s,%s,%u\n", pqr,"\0","\0",def); 
    printf("The values are,%u,%d,%d,%u\n", pqr,atoi("\0"),atoi("\0"),def); 


} 

的值,201 ,,, 113
的值,201,0,0,113

的如果值字符串設置爲NULL,並且我使用格式說明符「%S」,則第一個printf不會給我任何提示。我如何在第二個中使用格式說明符%d來獲得相同的結果。目前它給「0」而不是什麼。

+0

' 「\ 0」!= NULL'。 '「\ 0」'只是一個空字符串(對於所有字符串而言,它相當於'「」')。 – nneonneo

+1

你期望從打印''\ 0''得到什麼? 'NULL'字符串? – raina77ow

回答

4

如果值字符串設置爲NULL並且我使用格式說明符「%S」,則第一個printf不會給我任何提示。

""是空字符串。 "\0"是一個帶有附加空字符的空字符串。它與NULL不一樣。傳遞s轉換說明符的空指針是未定義的行爲。

如何在第二秒中使用格式說明符%d實現相同的結果。

你不行。 printf%d轉換規範打印一個int值;它不能打印任何東西。

0

只要測試它是否爲0並打印出你想要的東西如果是。

{ 
    int number = 0; 
    char dummy[24]; 
    printf("This is the number: %s\n", (number == 0)? "" : itoa(number, dummy, 10)); 
} 

三元運算符(? :)應該檢查該數是零,並且如果它是,則返回該獲取打印一個空字符串。

如果數字不爲零,它將在數字(基數爲10)上運行itoa(Integer to Ascii),並返回該字符串。

對於itoa工作,它需要一個緩衝區來存儲其結果,因此dummy變量。

3

%d總是打印一個整數,因此總是打印一些數字序列。沒有NULL整數的概念,所以你不能讓它不打印任何東西。

順便說一下,"\0"不是NULL字符串; NULL是。對於所有字符串目的而言,"\0"相當於""

+0

所有*字符串*的目的。我知道有差異。 – nneonneo

0

atoi()功能將字符串轉換爲整數,這樣它爲什麼在第二種情況下打印0因爲空字符串("\0")的atoi是0和一個隨機字符串,這不是數字的的atoi,是0過。

%d用於整數顯示和%s用於顯示字符串