请考虑以下事项:
typedef struct wordType
{
char word;
uint count;
};
int main( void )
{
typedef struct wordType * WORD_RECORD;
WORD_RECORD arrayOfWords = malloc(10 * sizeof( WORD_RECORD) );
FILE * inputFile;
char temp[50];
uint index;
inputFile = fopen( "input.txt", "r");
while( fscanf( inputFile, "%s", temp) == 1 )
{
printf("%s\n", temp );
arrayOfWords[index].word = malloc( sizeof(char)*(strlen(temp) + 1 ));
strcpy( arrayOfWords[index].word, temp );
}
index++;
}
每次通过scanf获取单词时我都会尝试malloc。但是,我似乎无法弄清楚为什么这不起作用。我收到了错误:
warning: assignment makes integer from pointer without a cast
warning: passing argument 1 of ‘strcpy’ makes pointer from integer without a cast
答案 0 :(得分:2)
c字符串的类型为char *。当你说
char word;
你为一个角色创造了足够的空间,而不是整个角色。使单词类型为char *:
char* word;
不要忘记设定计数。
此外,您可能想要注意,您从未读过10行以上,否则会出现另一个内存错误。
答案 1 :(得分:1)
您希望将word
用作字符串。字符串是以空值终止的字符数组,因此您需要为其指定类型char*
。由于您是为每个单词动态分配内存,因此请务必稍后在每个单词上调用free
。
或者,您可以利用temp
是50个字符数组和硬代码word
来获得相似大小的事实。
最后一点,sizeof(char)
保证为1,因此您可以简化malloc
计算。