2014-11-01 110 views
1

我有一个字符数组,并存储短整数它:C如何打印存储在char数组中的短整数?

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 | 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 |

看来他们是我的内容之间的7字节空间()。但我想在每个单字节中存储“12”。应该可以在char数组中存储和缩短,我的意思是1个字节的最大表示是256.我做错了什么? ...寻找一些好建议=)

在linux下开发。

+0

@GrzegorzSzpetkowski,目的地是buf,不是号码 – Vincent 2014-11-01 15:29:14

+1

您是否编译过所有警告和调试信息('gcc -Wall -Wextra -g')?如果你这样做了,编译器会警告你! – 2014-11-01 15:35:21

+0

我没有得到任何警告mhh – Leviathan 2014-11-01 15:51:44

回答

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; 
} 
+0

我知道..我的错误应该更明显..谢谢! – Leviathan 2014-11-01 15:51:04

+0

@Leviathan:不客气:) – user1336087 2014-11-01 15:53:07

0

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

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

2

正在使用错误的功能:memcpy而不是memset
引用man(3) memcpy

的的memcpy()函数拷贝n个字节从存储器区域的src到存储器区域DEST。

如果num是一个至少有n个字节的缓冲区,这样可以。但是,您希望将某个值设置为某个内存块: memset(buff, 12, sizeof(buff))

1

如,

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; 
} 

希望它能帮助!