说出如果我有: 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");
}
说出如果我有: 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");
}
如果你实际上是在寻找空元素,那么你应该做以下条件:
if(str[i]=='\0')
在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);
说,如果我有:无符号字符*海峡= “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");
}
使用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;
}
告诉我们你的循环 –
' “0”'为字符零,又名的ASCII字符48(十六进制的0x30)。 '0'是值零,又名空/假 –
@MarcB是100%正确的,你应该使用单引号,而不是双引号。 – kevinsa5