说如果我有:
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");
}
说如果我有:
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");
}
在 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);
如果您实际上是在寻找 null 元素,那么您应该执行以下条件:
if(str[i]=='\0')
假设我有: 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");
}
利用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;
}