因此,用户将输入未知数量的单词,我假设每个单词的最大长度为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;
}
答案 0 :(得分:2)
NUM_OF_WORDS是常量,无法分配。
w不应该使用数组,应该使用char **
在realloc中,您应该使用sizeof(char *)
修改后的代码:
#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)