c - for循环完成后的段错误
问题描述
尝试检查标准输入参数是否存在非法字符(冒号、句号和逗号)。使用 strchr。如果它在 args 中发现非法字符,它将按我的预期退出。如果所有输入都正常,那么它会返回一个段错误(在检查所有参数之后)。不离开 for 循环
int main(int argc, char** argv) {
for(int i=0; i<=argc; i++) {
const char colon = ':';
const char stop = '.';
const char comma = ',';
char *a, *b, *c;
a = strchr(argv[i], colon);
b = strchr(argv[i], stop);
c = strchr(argv[i], comma);
if (a != NULL || b != NULL || c != NULL) {
printf("found invalid char\n");
return 1;
}
}
return 0;
}
解决方案
argv
从0
到argc - 1
。
因此,您的循环条件:
i<=argc
错了一个。它将访问将触发段错误的无效内存。
推荐阅读
- rubygems - 深度 2 的 jruby gem SSL 验证错误 - 您必须添加 Blue Coat System Cloud Services Root CA
- python - 使用 flas-mysqldb 获取数据
- javascript - 如何让我的 JavaScript 代码更短?
- javascript - React Bootstrap ..如何指定每行的列数?
- python - raise ValueError("DataFrame 构造函数未正确调用!")
- java - 从 java 调用 clojure 时无法在类路径上找到 proj/core.clj
- javascript - 如何找到具有样式属性的不透明度为 1 的表格行的长度?
- postgresql - 尽管使用了 alter user set search_path .... 命令,但 Postgresql set search_path 不会影响
- api - 如何知道 twitch 流媒体是否直播并发送相关消息?不和谐.py
- python - 实现了方差方程,但它们没有相同的结果