#include<stdio.h>
int main()
{
char *a;
char *temp ='55515';
a = &temp;
printf("%s ", a);
}
预期输出为55515但实际输出为5155?
答案 0 :(得分:0)
'55515'
是一个多字符常量,转换为int
。您的平台具有32位int
s,因此MSB字节将被丢弃,生成的int
为(int)0x35353135
。然后以实现定义的方式将其转换为指向char
的指针。您的平台是一个小端平台,char转换保留int
值。指针对象的值现在作为
temp:
| 0x35 | 0x31 | 0x35 | 0x35
或
| 0x35 | 0x31 | 0x35 | 0x35
不能扣除您是否使用64位或32位平台。
现在,您将指向char *
的指针指向指针对象的第一个字节,即字节0x35
,然后{{1}这是一个printf
的字符串。
根据您的平台,%s
调用只有实现定义的行为或者也可能是未定义的行为 - 它取决于您的指针是32位还是64位 - 如果是32,那么您有未定义的行为,如果64 ,你只是依赖于实现定义的行为。总而言之,不是严格遵守程序所依赖的东西。