我无法弄清楚为什么这个结果会出现未定义的行为或其所谓的?
char ch[10];
strcpy(ch, "street1-3");
char ch2 = ch[6];
cout << ch2 << endl;
int n = (int) ch2;
n = n * 12;
cout << n << endl;
即cout首先打印出street1-3的位置6,即&#34; 1&#34;。 然后,当我试图将这个char类型转换为int时,该值变为不是它预期的值,即12,而不是588。
在consolewindow中输出
1
588
我在类型转换中做错了什么以及它是如何解决的?
答案 0 :(得分:8)
字符'1'
的ascii值不是1
。所以(int)'1' != (int)1
。
如果您查看ASCII表格,您会看到'1' == 49
,巧合(或不是......)49*12 == 588
。
答案 1 :(得分:0)
(int)ch2
告诉编译器将ch2
中的char值解释为int。由于字符按ascii值存储,ch2
包含49
,这是计算使用的内容。
而不是(int)ch2
,而应使用int(ch2)
代替{{1}},这将执行您期望的转化。
哦,你应该总是在可能的情况下避免使用c ++中的c样式转换 - c ++提供了许多你应该使用的更安全的转换(动态,静态等)。
答案 2 :(得分:0)
运营商<<
与char
和int
有两种不同的行为。使用char
,您将获得相应的字符,即"1"
,其ascii值为49
。因此,当您执行int n = (int)ch2
时,n的值为49
,则n * 12
等于588
,因为n
是一个int,因此将其作为值输出
答案 3 :(得分:0)
AS ch2 = 1,类型为'char',当它被类型转换为'int'时,它取ASKII值1为49,并将其赋值为'n'。并且49 * 12是588,这是您的程序的输出。