說出如果我有: 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