【问题标题】:Problems with segmentation fault [closed]分段错误的问题[关闭]
【发布时间】:2021-12-07 15:38:41
【问题描述】:

我正在使用此代码打印小于或等于 100 的参数。当我尝试编译时会出现问题,尽管我不知道为什么会这样,但它总是给我错误 Segmentation Fault。谁能帮助我了解发生了什么?

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
    printf("# args: %d\n", argc);
    printf("l1 %s\n", argv[2]);
    printf("l2 %d\n", atoi(argv[3]));
    int argumentos = argc;
    for (int i = 0; i < argumentos; i++)
    {
        if (atoi(argv[i + 1]) >= 100)
        {
            printf("%d", atoi(argv[i + 1]));
        }
        else
        {
            printf("vai dar não!");
        }
    }
    return EXIT_SUCCESS;
};

【问题讨论】:

  • 请不要发送垃圾标签。这看起来像 C,而 C++ 是一种不同的语言,它也不是 bash 脚本
  • 你如何调用你的程序?
  • 你为什么阅读argv[i + 1]却查看i &lt; argc

标签: c stdio


【解决方案1】:

当您访问无效的内存地址时会发生段错误。问题是这一行:

if (atoi(argv[i + 1]) >= 100)

还有:

printf("%d", atoi(argv[i + 1]));

一个大小为 8 的数组,索引从 0 到 7,所以当i 等于argumentos - 1 时,您的代码中会出现问题,您尝试访问一个不在您的数组中的值。

【讨论】:

  • 此外,如果argc 小于4,printf("l1 %s\n", argv[2]);printf("l2 %d\n", atoi(argv[3])); 可能会出现问题。
猜你喜欢
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2018-10-30
  • 2020-10-25
  • 2018-07-13
  • 2017-03-12
  • 2014-07-01
相关资源
最近更新 更多