在char缓冲区数组中存储整数变为二进制值

时间:2015-05-28 06:04:59

标签: c

我有一个整数数组,例如:

memcpy将值放入char缓冲区,下次检索它时,它变为二进制值,例如00000 - > 16。我该如何避免这种情况?

以下是我的代码片段:

char buf[BUFSIZE];
int outgoingPorts[4] = { 100000, 100001, 100002, 100003 };
memcpy(buf, &outgoingPorts[0], sizeof(outgoingPorts[0]);

printf("Port no: %i\n", buf);

此处,buf或第一个传出端口为16而非10000

1 个答案:

答案 0 :(得分:3)

首先,您使用了错误的格式说明符,要打印char指针的内容,您需要使用%s,前提是char数组空值终止。否则,您将面临未定义的行为。

然后,如果您真的想在int数组中存储char值,那么最合适的方法是使用snprintf()打印 char数组中的值。也许以下伪代码会帮助你

char carr[16];
snprintf(carr, 16, "%d", outgoingPorts[0]);
printf("%s\n", carr);                         //should print 100000

FWIW,使用错误或不匹配的格式说明符调用undefined behaviour