如何将int数组值存储在char数组中?
我有一个整数数组:如何将int数组值存储在char数组中?
int a[4] = {192,168,8,100};
我需要这些数字存储在字符数组类似如下:
char ip[15] = "192.168.8.100";
是否有任何库函数在C使用?
如果你想要在堆上动态分配内存,你可以使用asprintf。
char *ip = NULL;
int ret;
ret = asprintf(&ip, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]);
if (ret < 0)
{
// error handling
}
// use ip
free(ip);
ip = NULL;
否则,如果您事先知道尺寸,您可以使用sprintf。
sprintf(ip, "%d.%d.%d.%d", a[0], a[1], a[2], a[3]);
就个人而言,我更喜欢使用asprintf
,但是,你要记住,以释放asprintf
分配的内存,否则你会得到一个内存泄漏。
附注asprintf
在内部调用realloc,因此只要您释放连续调用,就可以将其用于字符串连接。
'asprintf'不是标准的。 –
您的第一个区块中的第3行应该是'ret = asprintf(&ip,“%d。%d。%d。%d”,a [0],a [1],a [2],a [3] );' –
你总是,总是,总是检查你是不是超越用C你的缓冲区,尤其是当你要处理的数据你就错过了一个网络。
例如,您将数组设置为十五个字符,但字符串"100.100.100.100"
具有十六个,其终止空值。目前这种方法很有效,但脆弱不堪。或者你可能会得到bug或恶意输入,如{-1000000000L, -1000000000L, -1000000000L, -1000000000}
。或者你以后可能会重构来支持IPv6。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DOTTED_IPV4_LEN 16U
int main(void)
{
static const unsigned char a[4] = {192,168,8,100};
char ip[DOTTED_IPV4_LEN];
snprintf(ip, DOTTED_IPV4_LEN, "%u.%u.%u.%u", a[0], a[1], a[2], a[3]);
puts(ip);
return EXIT_SUCCESS;
}
事实上,一些商店,包括我认为微软,甚至不接受目标缓冲区所声明的堆栈一样,并会要求进行ip
动态分配的内存指针的额外的防范措施,或许:
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DOTTED_IPV4_LEN 16U
int main(void)
{
static const unsigned char a[4] = {192,168,8,100};
char (* const ip)[DOTTED_IPV4_LEN] = malloc(sizeof(*ip));
assert(ip);
snprintf(*ip, sizeof(*ip), "%u.%u.%u.%u", a[0], a[1], a[2], a[3]);
puts(*ip);
free(ip); // Unnecessary because we're about to quit.
return EXIT_SUCCESS;
}
'sprintf(ip,“%d。%d。%d。%d”,a [0],a [1],a [2],a [3])'就够了。 –
另外'char ip [15]' - >'char ip [16]' – BLUEPIXY
谢谢。这很简单。 :) –