为什么输出与第一个字符缺失一起反转?

时间:2017-07-28 05:41:39

标签: c pointers

#include<stdio.h>
int main()
{
    char *a;   
    char *temp ='55515';
    a = &temp;  
    printf("%s ", a);
}

预期输出为55515但实际输出为5155?

1 个答案:

答案 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 ,你只是依赖于实现定义的行为。总而言之,不是严格遵守程序所依赖的东西。