我有一个int
存储IP地址的数组:
int ipArr[4] = {192,168,1,60}
我需要将上面定义的地址转换为类似的字符串"192.168.1.60"
。我尝试了sprintf
和strcat
函数,但是代码仍然非常麻烦。处理句点标点符号非常棘手。我的代码如下:
char srcIp[16];
int i=0,index=0;
for(i=0;i<4;i++){
index+=sprintf(&srcIp[index],"%d",sourceIpInt[i]);
if(i<3){
index+=sprintf(&srcIp[index],"%c",'.');
}
}
谁能提出更好的方法?
sprintf()
在单个调用中而不是在执行循环时,使用单个格式来格式化所有ip地址八位位组更加简单容易。
如果缓冲区可以是局部变量。
char buffer[16];
const int ip[4] = {172,0,0,1};
sprintf(buffer, "%d.%d.%d.%d", *ip, ip[1], ip[2], ip[3]);
printf("IP address is: %s", buffer);
或者,如果您需要使用动态内存,则可以执行以下操作。
char * buffer = malloc(16);
const int ip[4] = {172,0,0,1};
if(!buffer) {
perror("malloc");
exit(1);
}
sprintf(buffer, "%d.%d.%d.%d", *ip, ip[1], ip[2], ip[3]);
printf("IP address is: %s", buffer);
free(buffer);
在上面的代码中,我使用了动态内存分配来创建缓冲区并将sprintf
数据写入其中。
请注意,malloc(16)
-sizeof(char)
根据定义等于1
,因此我们不需要写malloc(sizeof(char) * 16)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句