2011-04-13 91 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