C语言strstr(*p1, *p2)如果p1为NULL,p2为“as”,会报错吗,结果是什么
时间: 2023-06-07 20:06:49 浏览: 162
如果p1为NULL,调用C语言函数strstr(*p1, *p2)会导致运行时错误(即“段错误”或“访问非法内存”),因为指针p1没有指向实际的有效内存地址。在这种情况下,该函数的返回值是不确定的,可能是一个任意的值,具体应该由具体的编译器和操作系统决定。因此,为了避免这种错误,应该在使用strstr函数之前,先检查指针p1是否为NULL,如果是,则应该在代码中处理该情况。
相关问题
C语言strstr函数源代码
这是C语言中strstr函数的源代码:
```C
char *strstr(const char *haystack, const char *needle) {
char *p1 = (char *) haystack, *p2 = (char *) needle;
char *p1Adv = (char *) haystack;
if (*needle == '\0') {
return (char *) haystack;
}
for (; *p1Adv; p1 = p1Adv++) {
p2 = (char *) needle;
if (*p1 != *p2) {
continue;
}
while (*++p1 && *++p2) {
if (*p1 != *p2) {
break;
}
}
if (*p2 == '\0') {
return p1;
}
}
return NULL;
}
```
希望可以帮到您。
c语言strstr的函数体
以下是C语言中strstr函数的函数体实现:
```c
char *strstr(const char *str1, const char *str2) {
const char *p1 = str1;
const char *p2 = str2;
const char *p1Adv = str1;
if (*str2 == '\0') {
return (char *)str1;
}
while (*p1Adv != '\0') {
p1 = p1Adv;
p2 = str2;
while (*p1 != '\0' && *p2 != '\0' && *p1 == *p2) {
p1++;
p2++;
}
if (*p2 == '\0') {
return (char *)p1Adv;
}
p1Adv++;
}
return NULL;
}
```
该函数的作用是在字符串str1中查找字符串str2的第一次出现,并返回指向该位置的指针。如果未找到,则返回NULL。
阅读全文