谁能帮助我理解这个strchr()C Segmentation故障?

uli*_*sBR 0 c pointers segmentation-fault strchr

我正在深入研究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;
}
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚为什么这会返回分段错误.当我使用gbd时,它告诉我错误是在最后printf,它试图打印*b.

一旦my_strchr()返回a (char*) str,我必须将这个返回值存储在char指针变量中,对吗?

eml*_*lai 5

如果my_strchr在字符串中找不到该字符,则返回NULL.

在这种情况下,未定义的行为b也是NULL如此*b,这解释了段错误.

您可能想要my_strchr在打印前检查结果*b,例如:

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