printf 系列中的第一个 printf() 出现故障,返回不可预测的结果
First printf() in series of printfs malfunctioning, returning unpredictable results
我制作了一个简单的函数,它接受一串数字并将它们 return 转换为 int 形式:
int my_atoi(char *str)
{
int i;
int num;
i = 0;
if (str[0] == '-')
i++;
while (str[i] != '[=10=]')
{
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);
}
无论我用多少不同的数字串(正数或负数)进行测试,也无论字符串是什么,我的 first printf - 即使只有一个 - return 将是一个不可预测的数字。例如,“-999”returned -2139331687。所有后续的 printfs 功能正常。
有什么线索吗?
使用 -Wall
(或编译器用来启用警告的任何标志),编译器应该立即告诉您问题所在——num
局部变量未初始化,因此它可能有任何调用函数时的随机值。
您需要对其进行初始化 -- 将声明更改为 int num = 0;
。
我制作了一个简单的函数,它接受一串数字并将它们 return 转换为 int 形式:
int my_atoi(char *str)
{
int i;
int num;
i = 0;
if (str[0] == '-')
i++;
while (str[i] != '[=10=]')
{
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);
}
无论我用多少不同的数字串(正数或负数)进行测试,也无论字符串是什么,我的 first printf - 即使只有一个 - return 将是一个不可预测的数字。例如,“-999”returned -2139331687。所有后续的 printfs 功能正常。
有什么线索吗?
使用 -Wall
(或编译器用来启用警告的任何标志),编译器应该立即告诉您问题所在——num
局部变量未初始化,因此它可能有任何调用函数时的随机值。
您需要对其进行初始化 -- 将声明更改为 int num = 0;
。