我正在尝试在字符数组中搜索字符串,其中要识别的字符串是UCAST,字符数组如下所示:
analysis_buffer[0] = \n;
analysis_buffer[1] = U;
analysis_buffer[2] = C;
analysis_buffer[3] = A;
analysis_buffer[4] = S;
analysis_buffer[5] = T;
analysis_buffer[6] = \r;
我为尝试搜索程序而执行的代码如下:
constant char str[] = "UCAST";
char* pch = strstr(analysis_buffer,str);
if (pch!=NULL) {
printf("found at %d\n", pch - analysis_buffer + 1);
pch = strstr(pch+1, analysis_buffer);
} else {
printf("pch :%s\n", pch);
}
注意:analysis_buffer是我上面描述的数组。
我遇到的问题是strstr位为NULL而不应该为NULL。有什么想法吗?
我已经在stackoverflow上查看了以下链接以获取帮助:
Does char array contain string?
How to search a string in a char array in C?
感谢
答案 0 :(得分:3)
代码不正确,因为数组是初始化程序太短的一个元素:
char str[5] = "UCAST";
由于向所有字符串文字添加了隐式空字符。从 6.4.5字符串文字部分C99标准的第5点开始:
在转换阶段7中,将值为零的字节或代码附加到由字符串文字或文字产生的每个多字节字符序列。 ...
可能的修复:
允许扣除所需的数组大小:
char str[] = "UCAST";
使用const char*
,因为str
无需修改
const char* str = "UCAST";
请注意,被搜索的字符串(在这种情况下为analysis_buffer
)也必须以空值终止。从发布的代码中可以看出这种情况并不明显。
此外,最终printf()
语句不正确,因为格式说明符为%c
,但参数(pch
)类型为char*
。通常,使用%s
并使用pch
或使用%c
和*pch
但 pch
为NULL
if
的分支,因此无法在printf()
中使用。