遇到细分错误,但看不到错误?

时间:2018-12-17 02:34:30

标签: c char

这是一个简单的程序,该函数检查字符串中的字符“ 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;
    }

1 个答案:

答案 0 :(得分:0)

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

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

您需要为指针创建后备存储,以便有一个 valid 地方可以将输入内容写入。

更好的主意是使用坚如磐石的输入例程,而不是依赖于诸如写入无效内存或允许不受控制的输入到有限大小的缓冲区之类的常见方法。 here就是其中一种。