首页 > 解决方案 > 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;
}

标签: c

解决方案


argv0argc - 1

因此,您的循环条件:

i<=argc

错了一个。它将访问将触发段错误的无效内存。


推荐阅读