2013-05-05 87 views
0

你能告诉我我在这里做错了什么?我在打印时没有得到文字printf("%s\n",text[0]);C中的字符串数组与malloc

我创建了char **text;malloc ed所有指针。

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 


char **text; 

int main() 
{ 
    int i; 
    text = malloc(20000); 


    for(i=0; i < 20000; i++) { 
     text[i] = malloc(4); 

     memcpy(text[i], "test",4); 
    } 
    printf("%s\n",text[0]); 
    printf("%s\n",text[1]); 
} 
+3

你的琴弦不以null结尾。 – nickb 2013-05-05 23:19:28

+1

此外,malloc(20000)分配20000 *字节*,然后您试图填充20000个字符指针(每个需要几个字节,并相互覆盖)。 – 2013-05-05 23:27:24

+0

是的,我应该做这个文本= malloc(20000 * sizeof(char *)); – 2013-05-05 23:29:43

回答

2

我相信你正在寻找的东西是这样的:

int numElements = 20000, i; 
// Allocate an array of char pointers 
text = malloc(numElements * sizeof(char *)); 

for(i = 0; i < numElements; i++) { 
    // 4 for the length of the string "test", plus one additional for \0 (NULL byte) 
    text[i] = malloc((4 + 1) * sizeof(char)); 
    memcpy(text[i], "test\0", 5); 
} 

这里是一个online demo显示它的工作,因为它产生的输出:

test 
test 
1
for(i=0; i < 20000/sizeof(char*); i++) { 
    text[i] = malloc(5); 
    memcpy(text[i], "test",5); 

} 
+0

或者,当然,将第一个'malloc(20000)'更改为'malloc(20000 * sizeof(char *))'。 – 2013-05-05 23:29:38

+0

我以为这可能是...... – BLUEPIXY 2013-05-05 23:35:20