如何将char *字符串转换为指向指针数组的指针并将指针值分配给每个索引?

时间:2018-01-18 05:49:27

标签: c pointers malloc c-strings pointer-to-pointer

我有一个char *,它是一个长字符串,我想创建一个指向指针(或指针数组)的指针。 char **设置为分配了正确的内存,我试图将每个单词从原始字符串解析为char *并将其放在char **中。

例如 char * text = "fus roh dah char **newtext = (...size allocated) 所以我想要:

char * t1 = "fus", t2 = "roh", t3 = "dah";
newtext[0] = t1;
newtext[1] = t2;
newtext[2] = t3;

我已经尝试打破原来并将空格变成'\ 0',但我仍然无法将char *分配并放入char **

2 个答案:

答案 0 :(得分:1)

试试这个char *newtext[n];。此处n是常量,如果事先知道n,则使用此值 否则char **newtext = malloc(n * sizeof *newtext);此处n是变量。

现在您可以像示例一样分配char*

newtext[0] = t1;
newtext[1] = t2;
newtext[2] = t3;
...
newtext[n-1] = ..;

希望有所帮助。

答案 1 :(得分:1)

假设您知道单词的数量,这是微不足道的:

char **newtext = malloc(3 * sizeof(char *));   // allocation for 3 char *
// Don't: char * pointing to non modifiable string litterals
// char * t1 = "fus", t2 = "roh", t3 = "dah";
char t1[] = "fus", t2[] = "roh", t3[] = "dah"; // create non const arrays

/* Alternatively
char text[] = "fus roh dah";    // ok non const char array
char *t1, *t2, *t3;
t1 = text;
text[3] = '\0';
t2 = text + 4;
texts[7] = '\0';
t3 = text[8];
*/
newtext[0] = t1;
newtext[1] = t2;
newtext[2] = t2;