C何时确定char []是字符数组还是字符串?

时间:2017-01-18 00:34:05

标签: c variables

char [i]代表变量char数组和字符串的声明。我知道如果C是一个字符串,C会在数组的末尾添加一个空字符。但是,C如何知道何时添加空字符,换句话说,在什么阶段?

2 个答案:

答案 0 :(得分:3)

它没有,C"字符串"只是关于数组的假设(它们在某处指示字符串的结尾有一个0)

没有类型"字符串"在C中,只是使用上述假设处理char数组的库。完全由库函数来管理数组,并在需要时确定何时终止它们。这些函数通常不会尊重实际为阵列分配的内存,它会假设已经为它所做的任何事情分配了足够的空间

完全有可能在C中使用pascal类型字符串,并根据需要使用该约定编写字符串库。

答案 1 :(得分:0)

C不知道作为字符串的char[]char*与不是字符串的char[]char*之间的区别。

C将添加nul终止符的唯一位置是使用字符串文字时。

const char x[] = "Hello, world!";
//                             ^ plus terminator, sizeof=14
const char *y = "Hello, world!";
//                            ^ plus terminator

您可以轻松创建没有终止符的数组:

const char x[] = {'H', 'e', 'l', 'l', 'o', ',',
                  ' ', 'w', 'o', 'r', 'l', 'd', '!'};
//                                                 ^ NO terminator
//                                                 sizeof=13

好吧,也许不是"同样容易",这是一个额外的打字。但是你可以看到重点:你使用了双引号"..."添加了nul终止符。

某些库函数也会为您提供nul终结符,例如strcpysnprintf