0

说如果我有: unsigned char* str = "k0kg"

0 是空元素。当我使用 for 循环遍历它时,如何检查数组是否为空?

我试过了: if (str[1]==0): 我也试过了: if (str[1]=="0"):

他们没有工作。:(

循环:

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

4 回答 4

3

在 C 中,根据定义,字符串由 NUL 字符 '\0' 终止。所以所有(有效的)字符串最后都有一个 '\0' 。

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

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

如果您正在处理正常的可打印字符串,那么您使用“unsigned char”是很奇怪的。如果你的意思是你有一个包含字节的内存块并且你想找到第一个 0x00 字节,那么你需要一个指向内存开头内存区域大小的指针,以字节为单位。然后,您将使用 memchr():

// Where strSize is the number of bytes that str points to.
const unsigned char * const end = memchr(str, 0, strSize);
于 2014-02-07T00:33:14.067 回答
2

如果您实际上是在寻找 null 元素,那么您应该执行以下条件:

if(str[i]=='\0')
于 2014-02-07T00:30:12.330 回答
1

假设我有: unsigned char* str = "k0kg"

0 是空元素。当我使用 for 循环遍历它时,如何检查数组是否为空?

你的术语会让任何 C 程序员感到困惑。您将字符表示与值混淆了。您不是在寻找空字符(“空元素”,即'\0'),而是在寻找字符'0'。所以...

int len = strlen(str);
for(int i = 0; i < len; ++i) {
    if(str[i] == '0')
        printf("found it");
}
于 2014-02-07T00:37:13.670 回答
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;
}
于 2014-02-07T11:13:56.920 回答