C如何打印存储在char数组中的短整数?

时间:2014-11-01 15:23:08

标签: c arrays memcpy

我有一个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下开发。

4 个答案:

答案 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)

filled it up with memcpy()。错误。 memcpy()无法填充数组。检查man pagememcpy()的正确用法。

您需要使用循环将值放入数组中。否则,您可以初始化数组(查看memset())以保存该值。