c - 出现分段错误但看不到错误?
问题描述
这是一个简单的程序,它是一个函数,它检查字符串中的字符“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;
}
解决方案
您的问题基本上在于这两行,即main
函数的第一行和第三行代码:
char *str; // Create pointer, pointing to ***arbitrary*** memory.
scanf("%s", str); // Write to that memory, undefined behaviour.
您需要为指针创建后备存储,以便您可以将输入写入有效的位置。
一个更好的想法是使用坚如磐石的输入例程,而不是依赖经常狡猾的做法,例如写入无效内存,或允许不受控制的输入到有限大小的缓冲区中。在这里可以找到这样一只野兽。
推荐阅读
- docker - Kubernetes Jenkins 插件 - 等待开始:尝试拉取镜像但失败
- c# - ToListAsync 抛出无法访问已释放的对象
- docker - 如果我执行 docker-compose pull,我可以跳过使用 docker-compose build --no-cache 吗?
- python - CSV 文本根据关键字读取/写入新文件
- python - Altair:不对轴进行排序
- ios - Xcode 9.4.1:0.012s 后超时(暂停计数=0(暂停:)
- reactjs - Apollo cache.readQuery 是否返回副本?
- javascript - 使用复选框按多个分类过滤帖子并选择
- mysql - MYSQL:从匹配组合的表中选择所有行,反之亦然
- facebook - 使用 Orchard CMS 将博客条目转发到 Facebook