在C语言中将标准输入存储到动态存储器中

在C语言中将标准输入存储到动态存储器中,c,pointers,computer-science,C,Pointers,Computer Science,我现在正在用C语言编写代码,只是为了发展我的C语言技能。我正在做的是将单词存储在分配的动态内存中,但在**指针方面有一些困难 比如说, while ((ch = getchar()) != EOF) 如果我键入abcd efgh,字符“abcd”应存储在ptr[0][I]中,第二个字符“efgh”应存储在ptr[1][I]中,这应通过循环完成 我想通过初始化 char **ptr = (char**)malloc(sizeof(char*)*n); 这可能吗 任何帮助都将非常感谢 下面是一个

我现在正在用C语言编写代码,只是为了发展我的C语言技能。我正在做的是将单词存储在分配的动态内存中,但在**指针方面有一些困难

比如说,

while ((ch = getchar()) != EOF)
如果我键入
abcd efgh
,字符“abcd”应存储在
ptr[0][I]
中,第二个字符“efgh”应存储在
ptr[1][I]
中,这应通过循环完成

我想通过初始化

char **ptr = (char**)malloc(sizeof(char*)*n);
这可能吗


任何帮助都将非常感谢

下面是一个在动态数组(char**)中存储一些字符串的示例

#包括
#包括
#包括
内部主(空)
{
字符**字符串=空;
字符串大小=3;
字符串大小和长度=10;
字符串=malloc(sizeof(*字符串)*nb_字符串);
//现在可以存储指向char的3个指针
对于(大小索引=0;索引
您需要了解realloc()。你们有两个层次的列表,你们有一个单词列表,当输入新词时,它必须展开,每个单词都是一个字符列表

从一个空的单词列表开始

 char **words = 0;
 int Nwords = 0;
一句空话

 char *word = 0;
 int wordlen = 0;
正如您所做的,我们的主循环是对输入的字符读取

 while( (ch = getchar()) != EOF)
 {
    /* logic here */
 } 
那么逻辑是什么呢

 while( (ch = getchar()) != EOF)
 {
    if(!isspace(ch))
    {
       /* add letter to word */
    }
    else
    {
       if(wordlen > 0)
       {
          /* add word to word list */
       }
    }
 }

我可以填写评论,但那将是为你做的。您可以使用realloc()为每个新条目增加缓冲区。

不确定表达式中的
i
是什么意思。我假设您的意思是希望在位置
ptr[0]
ptr[1]
等处存储字符串。您一开始几乎是对的。此外,一旦分配了
ptr
,就需要分配每个字符串指针,例如
ptr[0]=malloc(sizeof(char)*string\u buffer\u length)
,等等。是的,但它分配了n个指向零的指针。然后必须为每个指针分配一个字符缓冲区。
 while( (ch = getchar()) != EOF)
 {
    if(!isspace(ch))
    {
       /* add letter to word */
    }
    else
    {
       if(wordlen > 0)
       {
          /* add word to word list */
       }
    }
 }