c - 4 字节字符串与作为字符串读取的 4 字节整数

标签 c string pointers memory-management

读取由 4 个字符(包括空终止符)组成的字符串(声明为数组/指针)是否比读取整数值(按字符串读取)慢(逐字节?),如下所示:

static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s", (char*)val);

最佳答案

好的答案是不要这样做!

完整的答案是:如果您的处理器使用小端字节顺序(例如:Intel 架构)并且 int 至少为 32 位,则代码的以下修改版本将产生预期的输出:

static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s\n", (char*)&val);

在标准输出上输出此行:

C++

因为0x2b2b43在内存中的字节表示是0x43 0x2b 0x2b 0x00。 val 的地址指向与字符数组“C++”相同的字节。强制转换不会更改地址,但会阻止编译器发出警告。

关于c - 4 字节字符串与作为字符串读取的 4 字节整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28663103/

相关文章:

c - 如何绘制一个 ds 的子显示器,就好像它是一个帧缓冲区一样?

java - 输入字符串而不是 int 时抛出错误

java - 如何将具有多个参数的对象的单个参数添加到该对象的数组列表中的字符串中?

c++ - 当我的 std::string 调整大小时,字符缓冲区会发生什么?

c - 使用单个字符使用 strcat 的段错误

c - 为什么元素不留在数组中?

c - 根据文件大小分配内存的数量不正确?

Swift 数组(bufferPointer)EXC_BAD_ACCESS 崩溃

c - 如何扫描从另一个 C 程序运行的输出字符串值?

c - 双重间接寻址和传递给函数的结构