2014-02-07 94 views
0

說出如果我有: unsigned char* str = "k0kg"如何知道char數組是否在C中有一個空元素?

而0是空元素。當我使用for循環遍歷它時,如何檢查數組是否有null?

我想: if (str[1]==0): 我也試過: if (str[1]=="0"):

而且他們沒有工作。 :(

循環:

for (i=0;i<num_bytes;i++){ 
    if (str[i]!=0){ 
     printf("null spotted\n"); 
} 
+0

告訴我們你的循環 –

+0

' 「0」'爲字符零,又名的ASCII字符48(十六進制的0x30)。 '0'是值零,又名空/假 –

+0

@MarcB是100%正確的,你應該使用單引號,而不是雙引號。 – kevinsa5

回答

2

如果你實際上是在尋找空元素,那麼你應該做以下條件:

if(str[i]=='\0') 
3

在C中,字符串,顧名思義,終止'\ 0',所以所有的(有效的)字符串在結尾都有一個'\ 0'

要找到'\ 0'的位置,只需使用strlen():

const char * const end = str + strlen(str); 

如果您正在處理普通的可打印字符串,那麼使用「無符號字符」會很奇怪。如果你的意思是你有一個內存塊字節它並且你想找到第一個0x00字節,那麼你需要一個指針指向內存區域的起始地址,以字節爲單位。然後,你會使用了memchr():

// Where strSize is the number of bytes that str points to. 
const unsigned char * const end = memchr(str, 0, strSize); 
1

說,如果我有:無符號字符*海峽= 「k0kg」

,0是空元素。當我使用for循環遍歷它時,如何檢查數組是否有null?

你的術語會混淆任何C程序員。你將字符表達與值混淆在一起。你不是在尋找一個空字符(「空元素」,這將是'\0'),你正在尋找字符'0'。所以......

int len = strlen(str); 
for(int i = 0; i < len; ++i) { 
    if(str[i] == '0') 
     printf("found it"); 
} 
0

使用strchr

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

int main(){ 
    char *str = "k0kg"; 
    char *p = strchr(str, '0'); 
    if(p){ 
     printf("find at %d\n", (int)(p - str));//find at 1 
    } 
    if(p=strchr(str, 0)){ 
     printf("find at %d\n", (int)(p - str));//find at 4 
    } 
    str = "k\0kg"; 
    if(p=strchr(str, 0)){ 
     printf("find at %d\n", (int)(p - str));//find at 1 
    } 

    return 0; 
} 
相關問題