c - printfs 系列中的第一个 printf() 发生故障,返回不可预测的结果

标签 c string atoi

我制作了一个简单的函数,它接受一串数字并以 int 形式返回它们:

int     my_atoi(char *str)
{
   int i;
   int num;

   i = 0;
   if (str[0] == '-')
       i++;
   while (str[i] != '\0')
   {
       num = num * 10 + str[i] - '0';
       i++;
   }
   if (str[0] == '-')
       num = num * -1;
   return (num);
}

我在主程序中提出了以下单元测试:

int main(void)
{
    char *m_i = "-999";
    char *odd_neg = "-2147483648";

    printf("%d\n", my_atoi(m_i));
    printf("%d\n", my_atoi(odd_neg));
    return (0);
}

无论我测试多少个不同的数字字符串(正数或负数),也无论字符串是什么,我的第一个 printf - 即使只有一个 - 将返回一个不可预测的数字。例如,“-999”返回-2139331687。所有后续的 printfs 都正常运行。

有什么线索吗?

最佳答案

使用-Wall(或者编译器用来启用警告的任何标志),编译器应该立即告诉您问题 - num 局部变量未初始化,所以它在调用函数时可能有任何随机值。

您需要初始化它 - 将声明更改为 int num = 0;

关于c - printfs 系列中的第一个 printf() 发生故障,返回不可预测的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33188985/

相关文章:

c - Newton-Raphson C 中的 While 循环不起作用

c - Linux 内核模块 - IOCTL 使用返回 ENOTTY

c - 使用 gcc 在 32 位模式下原子读/写 64 位值

.net - 理解 C++ .Net 中的 String^

java - 如何判断2个不同的单词是否具有相同的字母?

c - C语言中将字符转换为字符串的API

c - atoi 函数从缓冲区添加数字

c++ - unsigned int 类型的函数返回负数

JavaScript,在不使用 eval 的情况下将私有(private)函数作为公共(public)方法中的字符串调用(显示模式)

c - 如何将参数传递给 C 语言中的 main() 函数?