如何重新分配数组的单词?

时间:2012-04-06 02:10:20

标签: c

因此,用户将输入未知数量的单词,我假设每个单词的最大长度为10; 我从realloc获得了作为赋值erorr的左操作数所需的左值。 我是C的新手,我试过谷歌,但找不到有用的答案。

代码:

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

    #define CAPACITY 10
    #define NUM_OF_WORDS 10
    int main(void)
    {

    char *word= malloc(10*sizeof(char));
    char *w[NUM_OF_WORDS];

    int i;
    int n;

    for(i = 0 ; scanf("%s", word)==1; ++i)
    {

    if( i == NUM_OF_WORDS-1)
    w = realloc(w, (NUM_OF_WORDS*=2) * sizeof(char));

    w[i] = malloc( strlen(word)+1 * sizeof(char));
    strcpy(w[i], word);
    }

    return 0;
    }

3 个答案:

答案 0 :(得分:2)

  1. NUM_OF_WORDS是常量,无法分配。

  2. w不应该使用数组,应该使用char **

  3. 在realloc中,您应该使用sizeof(char *)

  4. 修改后的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define CAPACITY 10
    #define NUM_OF_WORDS 10
    
    int main(void)
    {
    
        char word[10];
        char **w = (char **) malloc(NUM_OF_WORDS * sizeof(char *));
    
        int i;
        int capacity = NUM_OF_WORDS;
    
       for(i = 0 ; scanf("%s", word)==1; ++i)
       {
    
           if( i == capacity -1)
               w = (char **)realloc(w, (capacity *=2) * sizeof(char *));
    
           w[i] = (char *)malloc( strlen(word)+1 * sizeof(char));
           strcpy(w[i], word);
       }
    
       // at last, release w and w's element.
       while ( --i >= 0 )
       {
            free(w[i]);
       }
    
       free( w );       
       return 0;
    }
    

答案 1 :(得分:1)

如果您希望能够使用realloc(),则需要使用w分配数组malloc(),而不是在堆栈中声明它。

答案 2 :(得分:0)

w = realloc(w, (NUM_OF_WORDS*=2) * sizeof(char));

关于错误 -

预处理后的

(NUM_OF_WORDS * = 2)为(10 * = 2)。您不能将10 * 2的乘积分配给10. 10是一个右值,并且不能分配任何编译器抱怨的东西。您可能意味着(NUM_OF_WORDS * 2)