第一个printf()系列printfs出现故障,返回不可预测的结果

时间:2015-10-17 16:36:18

标签: 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都能正常运行。

任何线索?

1 个答案:

答案 0 :(得分:2)

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

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