2014-02-07 61 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; 
} 
相关问题