在数据类型字符串和unsigned long之间的c中进行类型转换

时间:2014-06-16 08:00:54

标签: c gcc4

我在intel机器上使用64位gcc编译器来编译以下代码

void main(void) {
    unsigned long L = 1, R = "123";
    printf("%s %lu %lu", "1st",L, R);
    printf("%s %d %s", "2nd", L, R);
}

我得到以下输出

  

1,1,5205913

     

第2,1,123

我的困惑是当我拿%Lu时这个号码是4205913,而当我拿%s" 123"打印得当。

1 个答案:

答案 0 :(得分:2)

正确打印123的原因是巧合:在您的架构中,地址可以适合unsigned long。这绝不是一种保证,所以你看到的是未定义的行为,只是简单地按照你自己的方式行事"。

该标准定义了一个保证能够保持指针的整数类型uintptr_t。通过适当的转换使用此类型可以将指针存储在非指针变量中,并避免未定义的行为。