Chi*_*era 6 c undefined-behavior
此代码通过正确识别某些数字回文并在其他数据上失败而随机失败.
#include <stdio.h>
int main(int argc, char *argv[])
{
int n, reverse = 0, temp;
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%d",&n);
temp = n;
while( temp != 0 )
{
reverse = reverse * 10;
reverse = reverse + temp%10;
temp = temp/10;
}
if ( n == reverse )
printf("%d is a palindrome number.\n", n);
else
printf("%d is not a palindrome number.\n", n);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
例如,上面的代码错误地说"87678"不是数字回文.
检查返回scanf()显示它是否成功并打印n输出87678 的值是正确的.
然而,代码正确地说"4554"是回文.
但是,添加:
n = reverse = temp = 0;
Run Code Online (Sandbox Code Playgroud)
在第一个printf()程序似乎始终正常工作之前.那么第一个版本中发生了什么?当变量在使用前未初始化时,这是某种未定义的行为吗?
编辑:稍后将提供编译版本的程序集,该程序集无法查看编译器正在执行的操作.
除非sizeof(int)小于 4,否则您可能遇到了编译器错误、硬件出现故障,或者系统中发生了某种形式的数据损坏。
回答这个问题:不,程序中的任何地方都没有未定义的行为(假设确实scanf()没有失败)。
尝试在您的系统上运行 memtest 以排除 RAM 问题:http://www.memtest.org
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |