【问题标题】:Segment fault iPhone executable段错误 iPhone 可执行文件
【发布时间】:2012-06-25 19:33:12
【问题描述】:

当我在我的 iphone 上运行我的 CLI 程序时,我得到一个 Segment fault: 11 错误。我不知道该怎么办,我是 C 的菜鸟。

int main (int argc, const char * argv[])
{
if (argc > 1 && (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h"))) {

    printf("#### redhai 1.2 ####\n");
    printf("-j Jailbreak\n");
    printf("-i Device info\n");
    printf("-a About\n");
    printf("*END OF HELP*\n");
    printf("####################\n");
    return 0;
}else if (!strcmp(argv[1],"-j")) {
    printf("Coding the jailbreak portion!\n");
    return 0;
}
return 0;
}

【问题讨论】:

    标签: c command-line-interface segment


    【解决方案1】:

    您在访问argv[1] 之前没有先检查它是否存在。你需要先检查是否argc > 1

    } else if (argc > 1 && !strcmp(argv[1],"-j")) {
    //         ^^^^^^^^^^^^
    

    【讨论】:

    • 嗯。天哪,我打字很慢。 +1
    【解决方案2】:

    问题在于逻辑。如果argc 小于或等于1,您可以将NULL 传递给strcmp。要修复它,请重新排序检查,如下所示:

    int main (int argc, const char * argv[])
    {
        if (argc > 1) {
            if (!strcmp(argv[1],"--help") || !strcmp(argv[1],"-h")) {
                printf("#### redhai 1.2 ####\n");
                printf("-j Jailbreak\n");
                printf("-i Device info\n");
                printf("-a About\n");
                printf("*END OF HELP*\n");
                printf("####################\n");
            } else if (!strcmp(argv[1],"-j")) {
                printf("Coding the jailbreak portion!\n");
            }
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多