Как узнать, имеет ли массив символов нулевой элемент в C?
Скажи, если у меня есть: unsigned char* str = "k0kg"
И 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");
}
4 ответа
В 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);
Если вы на самом деле ищете нулевой элемент, вы должны выполнить следующее условие:
if(str[i]=='\0')
Скажите, если у меня есть: unsigned char* str = "k0kg"
И 0 является нулевым элементом. Когда я проверяю цикл с помощью цикла for, как я могу проверить, имеет ли массив значение NULL?
Ваша терминология запутает любого программиста на Си. Вы путаете представления символов со значениями. Вы не ищете нулевой символ ("нулевой элемент", который был бы '\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;
}