2012-04-13 106 views
2

所以我讀字符一個接一個從文件:爲什麼在這種情況下strcmp不返回0?

char temp[3]; 

temp[0] = nextchar; 
printf("%c",temp[0]); //prints % 

temp[1] = nextchar = fgetc(srcptr); 
printf("%c",temp[1]); //prints 2 

temp[2] = nextchar = fgetc(srcptr); 
printf("%c",temp[2]); //prints 0 

if(strcmp(temp, "%20") == 0) { printf("%s","blahblah"); } 

理想本應在最後打印「blahblah」。但是,它沒有。那麼爲什麼strcmp返回0,更重要的是:我該如何解決它?

回答

9

您需要null結束temp。

編輯

變化char temp[3];char temp[4]; temp[3] = 0;

6

使用memcmp代替,因爲strcmp預計兩個字符串是'\0'封端的(和temp沒有):

if(memcmp(temp, "%20", sizeof(temp)) == 0) { printf("%s","blahblah"); } 
3

字符串是以'\ 0'字符結尾的字符數組。由於您的tmp數組可以包含三個字符,並且它們都不是終止空字符,所以strcmp(以及任何其他字符串函數)會認爲它繼續進一步讀取內存,直到遇到空字符爲止(或因輪胎崩潰而崩潰)讀取受限的內存空間)。

字符串「%20」是真正的字符:「%」,「2」,「0」,「\ 0」

因此,要解決它是聲明tmp之一,並且分配的最簡單方法'\ 0'到最後一個元素:

char tmp[4]; 
... 
tmp[3] = '\0'; 
相關問題