gpt4 book ai didi

谁能帮我理解这个 strchr() C 段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:16 27 4
gpt4 key购买 nike

我正在深入研究 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 指针变量中,对吧?

最佳答案

my_strchr在字符串中找不到字符时,返回NULL

在这种情况下 bNULL 所以 *b 是未定义的行为,这解释了段错误。

你可能想在打印*b之前检查my_strchr的结果,例如:

if (b != NULL) {
printf("Character found! %c\n", *b);
} else {
printf("Not found...\n");
}

关于谁能帮我理解这个 strchr() C 段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41364207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com