C 将整数存储在字符缓冲区数组中成为二进制值

C 将整数存储在字符缓冲区数组中成为二进制值,c,C,我有一个整数数组,例如: 我memcpy将该值放入一个字符缓冲区,下次检索时,它将变成一个二进制值,例如,00000->16。我如何避免这种情况 以下是我的代码片段: char buf[BUFSIZE]; int outgoingPorts[4] = { 100000, 100001, 100002, 100003 }; memcpy(buf, &outgoingPorts[0], sizeof(outgoingPorts[0]); printf("Port no: %i\n", bu

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

memcpy
将该值放入一个字符缓冲区,下次检索时,它将变成一个二进制值,例如,
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

首先,您使用的格式说明符完全错误,对于要打印的
char
指针的内容,您需要使用
%s
,前提是
char
数组以null结尾。否则,您将面临未定义的行为

然后,如果您真的想在
char
数组中存储
int
值,最合适的方法是使用在
char
数组中打印该值。也许下面的伪代码可以帮助您

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

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

您的意思是:
sizeof outgoingport
。其次,您对输出的期望是什么?“我如何避免这种情况?”-避免什么?这个代码应该做什么?(即,你想实现什么目标)?您将
int
的字节表示形式复制到了char数组中。你希望这能实现什么?我的意思是把支出港口的第一个要素放在这里,这样就可以了。我希望输出是10000@WhozCraig我还计划使用数组来保存其他字符,只是代码中没有表示。在保持整数的十进制表示形式的同时,是否可以使用字符数组同时保存字符和整数?(不是字节)使用
%i
格式说明符将
char
数组的基址发送到
printf
,当然不是这样做的方法。您是否试图将
int
10000
的文本表示形式放入
char
缓冲区?即
buf[0]='1',buf[1]='0'
等?请注意,这些是字符。如果是这样,它可以使用很多工具(C代码或C++中的<代码> SpRtff函数,<代码> STD::OSTRIGSTROUND C++中的中介程序)。我尝试了用MeMCPY编写的程序,而它没有给我任何O/P,你能告诉我为什么这里有代码吗?include#include//memcpy#include//realloc#define BUFSIZE 20 int main(){char buf[BUFSIZE];int outgoingPorts[4]={100000,100001,100002,100003};memcpy(buf,&outgoingPorts,sizeof(outgoingPorts[0]);printf(“端口号:%i\n”,buf);return 0;}@yanivx记住,在这里,表示很重要。在我的代码中,我使用了词典编纂的方式
memcpy()
将复制字节表示形式,而不是字典值。@yanivx 1)不要将代码放入注释中,完全标记未启用,几乎无法读取。2) 仅通过将参数更改为
memcpy()
您无法实现这一点。抱歉@Sourav将在以后粘贴代码时记住这一点。总之,每当我们将int数组复制到char数组以保留值时,我们不应该使用
memcpy
,这样我们就不会复制字节表示。@yanivx没问题。不,这不是一个经验法则,而是取决于您的需求,如果您希望将
int
值打印为
char
数组(或字符串),则不需要执行
memcpy()
。在某些情况下,如果需要字节表示,可以使用
memcpy()
,但在这种情况下不需要这样做。