C - 引号和撇号之间的区别( "vs ')

标签 c syntax

<分区>

在 C 中,注意到这两种指定语法之间存在差异。观察

 char test[5] = {"c", "o", "o", "l", "\0"}; // with quotation

带来错误:

error: (near initialization for 'test')
error: excess elements in char array initializer
error: (near initialization for 'test')
error: excess elements in char array initializer
error: (near initialization for 'test')
error: excess elements in char array initializer
error: (near initialization for 'test')

在哪里

char test[5] = {'c', 'o', 'o', 'l', '\0'}; // with apostrophe

编译得很好。这是什么原因?

最佳答案

这个数组中的元素是字符(每个1字节):

char test[5] = {'c', 'o', 'o', 'l', '\0'};

这是一个以 null 结尾的 C 字符串。它在内存中的表示方式完全相同。它正好由 5 个字节组成:字母“cool”和终止空字符:

char test2[5] = {"cool"};

这由两个字节组成:

char test3[] = "c";

您的原始示例是一个 2 字节字符串数组。与前面的示例不同,它实际上是一个 2 级数组。您必须这样声明:

char *test[] = {"c", "o", "o", "l", "\0"};

关于C - 引号和撇号之间的区别( "vs '),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32731240/

相关文章:

Mysql Alter表可以转换为默认值吗?

plsql - Visual Studio 2015 中的 PL/SQL 语法突出显示

haskell - 为什么如果我添加空格,这个 Haskell 代码就会变得无效?

c - 如何防止内部结构对 API 用户可见?

java - 在不同的类中创建内部类对象数组

c - Google 使用等待循环测试 C 函数

c - 如何验证结构体成员?

MySQL - 语法错误

c++ - 数组索引循环变量在 C、C++ 中重置为零

c - 为什么预处理器需要大括号才能有语句?