我试图在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 }
但是我还不清楚第一种方法为什么不能正常工作?
答案 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)
您必须使用指针来比较它的值。