我刚刚将一个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结果?
答案 0 :(得分:5)
中的数组
char ip [11] = "65.55.57.27";
没有NUL terminator的空间,因为字符串文字正好是11个字符。
这导致
printf(ip);
以下任何一种方法都可以解决问题:
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;
}