C++ 将值从char指针复制到char数组
我有一个指针*ip\u地址\u服务器,它保存服务器的ip地址:C++ 将值从char指针复制到char数组,c++,arrays,pointers,C++,Arrays,Pointers,我有一个指针*ip\u地址\u服务器,它保存服务器的ip地址: in_addr * address = (in_addr * )record->h_addr; char *ip_address_server = inet_ntoa(* address); 显然,当我使用printf打印它的值时,它会被很好地打印出来 printf("p address %s" , ip_address_server); 但是现在如果我声明一个数组,比如说大小为20的数组来保存这个值,那么我
in_addr * address = (in_addr * )record->h_addr;
char *ip_address_server = inet_ntoa(* address);
显然,当我使用printf打印它的值时,它会被很好地打印出来
printf("p address %s" , ip_address_server);
但是现在如果我声明一个数组,比如说大小为20的数组来保存这个值,那么我需要将内容从指针复制到数组
char host_name[20];
为了复制我使用for循环的值。但我稍后打印的值不是正确的值
for(int i = 0; ip_address_server[i] != '\0'; i++)
host_name[i] = ip_address_server[i];
printf("hostname %s \n" , host_name);
我认为终止条件有一些错误
我的方法是错误的还是有其他的解决方法
循环没有复制
'\0'
字节
另外,为什么不使用(或更安全的)或?字符数组末尾缺少nul字符。for循环复制所有字符,但不复制nul字符。要解决此问题,您必须在循环外复制它,如下所示:
int i;
for( i = 0; ip_address_server[i] != '\0'; i++)
host_name[i] = ip_address_server[i];
host_name[i] = 0; // add nul char.
printf("hostname %s \n" , host_name);
安全和更好的方法:
snprintf(host_name, sizeof(host_name), "%s", ip_address_server);
您的示例不起作用,因为
i
不是在for
语句之外定义的。inet\u ntoa
只会将IPv4地址从'in\u addr'形式转换为点和数字
字符串形式,它不会执行任何反向DNS查找等操作,因此只需要16个字符。