我有一个指针* ip_address_server,它保存服务器的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的数组来保存该值,那么我需要将指针中的内容复制到数组中。
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 :(得分:5)
答案 1 :(得分:2)
安全&更好的方法:
snprintf(host_name, sizeof(host_name), "%s", ip_address_server);
答案 2 :(得分:1)
答案 3 :(得分:1)
您缺少char数组末尾的空字符。你的for循环复制所有字符,但不复制空字符。为了解决这个问题,你必须在循环之外自己复制一次:
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);