首页 > 解决方案 > 出现分段错误但看不到错误?

问题描述

这是一个简单的程序,它是一个函数,它检查字符串中的字符“a”,如果找到则返回该字符,如果未找到则返回 NULL。我不确定是函数还是函数本身的调用,这里是代码。

#include <stdio.h>
char *find_char(char *str, char character);
int main(){
char *str;


printf("str\n");
scanf("%s", str);


printf("%c",*find_char(str,'a'));

return 0;
}


char *find_char(char *str, char character){

    char *pstr = str;

    while(*pstr!='\0' && *pstr!=character){
        pstr++;}

    if (*pstr!=character)
        return NULL;

        else
            return pstr;
    }

标签: cchar

解决方案


您的问题基本上在于这两行,即main函数的第一行和第三行代码:

char *str;        // Create pointer, pointing to ***arbitrary*** memory.
scanf("%s", str); // Write to that memory, undefined behaviour.

您需要为指针创建后备存储,以便您可以将输入写入有效的位置。

一个更好的想法是使用坚如磐石的输入例程,而不是依赖经常狡猾的做法,例如写入无效内存,或允许不受控制的输入到有限大小的缓冲区中。在这里可以找到这样一只野兽。


推荐阅读