2014-11-01 128 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; 
} 

希望它能幫助!

相關問題