【发布时间】:2017-05-12 20:44:24
【问题描述】:
我正在深入研究 C 中的指针和字符串,但我仍然习惯了一些概念。我尝试实现strchr() 函数的一个版本——与 string.h 中的函数相同——用于学习目的,但一些基本的东西仍然不正确。
这是我的代码:
#include <stdio.h>
char* my_strchr(const char* str, int c){
if (str == NULL){
printf("STR is NULL. Finishing the program\n");
return NULL;
}
while (*str != '\0'){
if (*str == c){
return (char*) str;
}
str++;
}
return NULL;
}
int main(){
char *a = "Hello World!";
char *b;
char c;
printf("Type the character you want to find in the Hello World! string:\n");
scanf(" %c", &c);
b = my_strchr(a, c);
printf("Character found! %c\n", *b);
return 0;
}
我试图弄清楚为什么这会返回分段错误。当我使用 gbd 时,它告诉我错误在最后一个 printf,它试图打印 *b。
一旦my_strchr() 返回(char*) str,我就必须将此返回值存储在char 指针变量中,对吧?
【问题讨论】:
-
所有输入都会出现这种情况,还是只出现在测试字符串中没有出现的字符?
-
@Rad Lexus 与所有输入...仍在试图弄清楚发生了什么...
-
显示您的输入。
strchr也可以搜索'\0'。 -
不适用于“所有输入”。输入
e有效。但是当没有找到时,你不会在引用NULL之前测试返回值。 -
我刚试过。只要您不搜索不在字符串中的字符,它确实 起作用。如果这样做,您将尝试打印
NULL的内容。
标签: c pointers segmentation-fault strchr