Tag: literals

为什么C中的复合文字可以修改

人们通常将“不可修改的”与术语“文字”联系起来 char* str = “Hello World!”; *str = ‘B’; // Bus Error! 然而,当使用复合文字时,我很快发现它们是完全可修改的(并且锁定在生成的机器代码中,您会看到它们被推入堆栈中): char* str = (char[]){“Hello World”}; *str = ‘B’; // A-Okay! 我正在使用clang-703.0.29编译。 这两个例子不应该生成完全相同的机器代码吗? 如果它是可修改的,复合文字真的是文字吗? 编辑:一个更短的例子是: “Hello World”[0] = ‘B’; // Bus Error! (char[]){“Hello World”}[0] = ‘B’; // Okay!

为什么sizeof(’a’)在C中是4?

可能重复: 为什么C字符文字而不是字符? #include int main(void) { char b = ‘c’; printf(“here size is %zu\n”,sizeof(‘a’)); printf(“here size is %zu”,sizeof(b)); } 这里输出是(在这里看现场演示。) here size is 4 here size is 1 我不明白为什么sizeof(‘a’)是4?

如何将复合文字用于`fprintf()`具有任意碱基的多个格式化数字?

我想将多个数字转换为某种表示forms,然后使用*printf()说明符的标志,宽度和精度。 首选是避免全局或static缓冲区。 关键问题似乎是如何为每个转换后的数字提供char[] ? fprintf(ostream, “some_format”, foo(int_a, base_x), foo(int_b, base_y), …); 如何使用C11复合文字来解决这个问题? 如何使用C99(或更高版本)复合文字来解决这个问题?