我有一个char数组并在其中存储了short int:
char buf[50];
short int num = 12;
用memcpy填充它:
memcpy(buf, &num, 50);
然后我试图打印出来:
for(i=0; i <50;i++) {
printf("%hd|",buf[i]);
}
我认为%hd
应该是打印出来的正确说明符。但我的输出如下:
12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 12 | 0 |
它们的内容( 12 )之间似乎是7个字节空格。但我想在每个字节中存储“12”。应该可以在char数组中存储和缩短,我的意思是1字节的最大表示是256.我做错了什么? ......寻找一些好的建议=)
在linux下开发。
答案 0 :(得分:4)
而不是memcpy
,您应该使用memset
。
#include<stdio.h>
#include<string.h>
int main()
{
char buf[50];
int i;
short int num = 12;
memset(buf,num,50);
for(i=0; i <50;i++)
{
printf("%hd|",buf[i]);
}
return 0;
}
答案 1 :(得分:2)
您使用了错误的功能:memcpy
而不是memset
引用man(3) memcpy
:
memcpy()函数将n个字节从内存区域src复制到内存区域dest。
如果num是一个至少有n个字节的缓冲区,那就没问题。但是,您希望将单个值设置为某个内存块:
memset(buff, 12, sizeof(buff))
。
答案 2 :(得分:1)
As,
memset()
将指定缓冲区中的所有字节设置为相同的值,memcpy()
将一个字节序列从另一个位置复制到缓冲区。
因此您应该使用memset()
而不是memcpy()
功能。
所以只需改变
memcpy(buf, &num, 50);
到
memcpy(buf, num, 50);
所以你的最终代码将是..
#include<stdio.h>
#include<string.h>
int main()
{
char buf[50];
int i;
short int num = 12;
memset(buf,num,50);
for(i=0; i <50;i++) printf("%hd|",buf[i]);
return 0;
}
希望它有所帮助!
答案 3 :(得分:0)