在strstr中检查char指针是否为NULL

时间:2015-03-25 16:27:06

标签: c strstr

我试图在C中实现strstr 但是我被困在这段代码中,这段代码在运行时崩溃了

while (*a==*b && a != NULL && b != NULL) {
    a++
    b++
}
if (b == NULL || *b == '\0') { // string found }

谷歌搜索了一段时间后,我发现了错误 https://stuff.mit.edu/afs/sipb/project/tcl80/src/tcl8.0/compat/strstr.c

我应该让我的循环执行以下操作:

while (*a==*b && *a != 0 && *b != 0) {
    a++
    b++
}
if (*b === 0) { // string found }

但是我还不清楚第一种方法为什么不能正常工作?

2 个答案:

答案 0 :(得分:2)

不同之处在于a != NULL*a != 0不同。

回想一下,字符串是一个字符数组,包括终止空字符'\0'。代码通常传递指向第一个字符的指针,而不是传递字符串。

a != NULL测试该指针是否等于NULL。值NULL的指针永远不是字符串。它只是一个指向永远不会有任何有效数据的位置的指针。

*a != 0测试指针a,假设它是char *类型,指向不具有空字符值的char '\0'因为那将是字符串的结尾。因此循环应该停止。


注意:循环可以简化。当代码到达*b != 0时,它已经不能具有'\0'的值。

// while (*a==*b && *a != 0 && *b != 0) {
while (*a==*b && *a != 0) {
    a++
    b++
}
// if (*b === 0) { // string found }  Type use ==, not ===
if (*b == 0) { // string found }

答案 1 :(得分:0)

您必须使用指针来比较它的值。