为什么这两个char数组返回不同的结果?

时间:2013-03-28 16:17:10

标签: c

我刚刚将一个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 char结果而12大小的数组返回11 char结果?

2 个答案:

答案 0 :(得分:5)

中的数组
char ip [11] = "65.55.57.27";

没有NUL terminator的空间,因为字符串文字正好是11个字符。

这导致

printf(ip);

undefined behaviour

以下任何一种方法都可以解决问题:

char ip [12] = "65.55.57.27";
char ip [] = "65.55.57.27";

答案 1 :(得分:1)

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

>> 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;
}

Live Demo