char [i]代表变量char数组和字符串的声明。我知道如果C是一个字符串,C会在数组的末尾添加一个空字符。但是,C如何知道何时添加空字符,换句话说,在什么阶段?
答案 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终结符,例如strcpy
或snprintf
。