我应该在 c 中手动分配字符串结尾字符 '\0' 吗?



我是c的新手,对字符串结尾字符'\0'感到困惑,我应该分配它吗?

例如,我想存储一个最大长度为 6 的字符串;

如果我使用数组,我应该使用char str[6]还是char str[7]

char as[3] = "abc";
printf("%sn", as);
//seems no problem

如果我使用字符指针,我应该使用char *str = malloc(6)还是char *str = malloc(7)

对于预先初始化的数组,不需要在括号中写入数字。你可以写

char str[] = "this is my string";

编译器将自动计算所需的字节数。

但是对于malloc,您必须添加 1。前任:

char *strdup(const char *str)
{
char *ret = malloc(strlen(str) + 1);
strcpy(ret, str);
return ret;
}

你应该使用字符串长度 + 1。在您的情况下,您必须在声明 char 数组时使用 7。 您提供的示例本来可以工作,因为 printf(( 显示的未定义行为。

除了stackptr的回答:

如果您打算覆盖阵列:

char str[30] = "abc";
...
strcpy(str, "Hello world"); /* This will overwrite the content of "str" */

。数组的长度必须是字符串的最大长度加 1。

在上面的示例中,您可以将长度不超过 29 个字符的字符串写入数组。

请注意,以下定义:

char str[] = "abc";

。隐式创建一个长度为 4 个字符的数组,因此限制为 3 个字符。

最新更新