0

我刚刚将一个 ip 分配给一个 char 数组并打印它以确保它是正确的并得到以下结果:

int
main(void)
{
    char ip [11] = "65.55.57.27";
    printf(ip);
    return 0;
}

我明白了

65.55.57.270 "

但是如果我将数组大小增加到 12

int
main(void)
{
    char ip [12] = "65.55.57.27";
    printf(ip);
    return 0;
}

我明白了

65.55.57.27

谁能解释一下?为什么大小为 11 的数组返回 13 个字符的结果,而大小为 12 的数组返回一个 11 个字符的结果?

4

2 回答 2

5

数组在

char ip [11] = "65.55.57.27";

NUL 终止符没有空格,因为字符串文字长度正好是 11 个字符。

这导致

printf(ip);

未定义的行为

以下任何一项都可以解决问题:

char ip [12] = "65.55.57.27";
char ip [] = "65.55.57.27";
于 2013-03-28T16:18:47.393 回答
1

\0您为 11 个字节腾出了空间,但char 数组中也存在隐式空字节:

>> ip

   {'6', '5', '.', '5', '5', '.', '5', '7', '.', '2', '7', '\0'}

因此,您的数组中有 12 个元素,其中 1 个元素太多。您应该在编译器上遇到错误。这就是我得到的:

error: initializer-string for char array is too long

我不喜欢处理这些琐碎的问题;这就是我使用的原因std::string

#include <string>
#include <iostream>

int main()
{
    std::string str = "65.55.57.27";

    std::cout << str;
}

现场演示

于 2013-03-28T16:20:35.667 回答