我有一个整数数组,例如:
我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
。
答案 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。