2011-04-13 62 views
1

我已經在緩衝區中獲得了一些數據,並希望將這些數據放入數組中。如何將數據從緩衝區放入C中的數組?

typedef struct chunk 
{ 
char data[300]; /* the bufferr. */ 
} CHUNK; 
char *buffer, CHUNK c [100]; 

假設我有數據到緩衝區中,我怎樣才能把每塊300字符?我是C新手,請用簡單的例子來解釋我。

感謝, 凱文

+0

,因此,所有的答案如下在某些情況下是可信的,在另一個情況下是有缺陷的。你正在處理文本數據(如果是這樣,是ASCIIZ?,你希望每個塊都是NUL終止?)還是二進制數據(在這種情況下,你需要知道緩衝區中數據的大小)。你想使用任何未使用的CHUNK數據元素/空間。 – 2011-04-13 04:20:21

+0

是的,我的數據將只是文本文件。直到現在還沒有想到未使用的CHUNK數據。我應該怎麼做 ?對不起,我是C的新手。 – kevin 2011-04-13 05:50:57

+0

C通常將字符串存儲爲0到255之間的一系列數字,其中0表示文本的結尾,其他數字表示根據ASCII碼錶示的字母(例如,32是空格,65大寫'A')。你需要弄清楚,如果你以後要做的任何事情需要每個完整的300個字符的塊有自己的0 C字符串終結符;對於任何最終的部分填充塊都是同樣的。那麼,你以後如何使用這些塊呢? – 2011-04-13 06:50:10

回答

1

C中,您可以使用memcpy()將內存從一個區域複製到另一個區域。原型爲memcpy()是:

void *memcpy(void *dst, const void *src, size_t n); 

和描述是,它複製n字節從srcdst,並返回dst

所以,從b 300個字節複製到a其中兩個ab點有用的東西,b至少有300個字節的數據,並a點到至少300個字節的空間,你可以寫,你會更多信息:

memcpy(a, b, 300); 

現在你的任務應該是沿着線的東西:您還沒有指定的問題充分

typedef struct chunk 
{ 
    char data[300]; 
} CHUNK; 
char *buffer; 
CHUNK c[100]; 
size_t i; 

/* make buffer point to useful data, and then: */ 
for (i=0; i < 300; ++i) 
    memcpy(c[i].data, buffer+i*300, 300); 
+0

>>謝謝。 buffer + i * 300做什麼?移動下一個300? – kevin 2011-04-13 06:16:43

+0

謝謝,我明白了! :D – kevin 2011-04-13 06:33:25

+0

有一個問題。因爲我正在讀取緩衝區,所以我不能使用你提到的循環,因爲緩衝區的大小可能會有所不同。我應該怎麼做 ??? – kevin 2011-04-13 06:40:41

1

您可以使用strncpy

strncpy(data, buffer, 299) ; 

離開了終止符'\0'最後一個索引。或者使數組大小爲301,然後對300個元素使用strncpy。

+0

@kevin - 給出的鏈接有一個簡單的例子和​​解釋,你可以檢查。 – Mahesh 2011-04-13 03:59:45

+0

@mahesh >>謝謝! – kevin 2011-04-13 05:52:18

+0

嗨,當我複製下一個300字符,它會知道從哪裏開始複製? – kevin 2011-04-13 06:06:06

3

的聲明是無效的,但我認爲你的意思是:

typedef struct chunk 
{ 
    char data[300]; /* the bufferr. */ 
} CHUNK; 

char *buffer; 
CHUNK c [100]; 

如果我正確(這我不能肯定,我做的)明白你的問題,代碼會是這樣的:

int j = 0; 
char *bp = buffer; 
while (*bp) 
{ 
    strncpy (c [j] .data, bp, 300); // copy data into next item 
    bp += strlen (bp); 
    ++ j; 
} 
+0

thx。但它不會循環。它只循環一次。 bp + = strlen(bp)是做什麼的? – kevin 2011-04-13 06:08:34

+0

'bp + = strlen(bp)'與'bp = bp + strlen(bp)'相同,這意味着按字符串的長度提前指針bp。如果緩衝區中少於300個字符,它只會循環一次。 – wallyk 2011-04-13 06:31:43