c - 在 C 中对 argv[1] 使用 atoi() 时出现算术溢出

标签 c buffer flags argv atoi

我正在使用atoi(argv[1])这是我的代码片段

void main(int argc, char* argv[])
{

    int evenOrOdd = 0;
    int inputtedNum = 0;

    pid_t  pid;
    int    i;
    char   buf[BUF_SIZE];

    if (argc != 2)//make sure user has input correctly entered
    {
        printf("Please use input: ./a.out #\n");
    }
    else
    {
        inputtedNum = atoi(argv[1]);
        if(inputtedNum < 0) //make sure number is positive
        {
            printf("Please use a positive number.\n");
            return;
        }
    }
    // ...
}

代码继续等等,但是当输入一些数字时,它有时会认为它们是负数。如果我输入123456789就没有问题并且可以正确运行程序。如果我输入 12345678910 它会认为该数字是负数。我是否在负标志翻转的地方遇到了一些缓冲区错误?我不太确定如何解决它。

感谢任何及所有帮助!

最佳答案

int 是一个比较窄的整数类型,也是一个有符号类型。使用 unsigned long 表示 inputtedNumstrtoul(argv[1], 0, 0) 来解析数字。

关于c - 在 C 中对 argv[1] 使用 atoi() 时出现算术溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860412/

相关文章:

c - sleep 函数是让所有线程都 sleep 还是只让调用它的线程 sleep ?

c - 应用程序在不同机器上的行为不同

c - libpcap : 64bit machine has no compatible 32-bit libpcap library

sockets - golang 获取udp套接字缓冲区大小

Node.js zlib gzip 缓冲区在存档内为 "file"

c++ - C++ 中的 cin.ignore() 和 cin.clear()

c# - 反转枚举标志

c++ - 保存、操作和恢复 std::ios_base::fmtflags

c - 尝试在 Eclipse 中调试,在 [十六进制数 'No Source Available for "] 处出现错误 ]"' main()

database-design - 在每个数据库引擎中存储二进制标志/ bool 值的最佳方法是什么?