0

考虑以下:

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
4

2 回答 2

2

一个 c 字符串是 char* 类型的。当你说

char word;

你为一个角色创造了足够的空间,而不是整个事情。将单词类型设为 char*:

char* word;

不要忘记设置计数。

此外,您可能需要注意,您阅读的行数永远不会超过 10 行,否则会出现另一个内存错误。

于 2013-04-29T21:47:03.040 回答
1

您想word用作字符串。字符串是一个以 null 结尾的字符数组,因此您需要为其指定 type char*。由于您正在为每个单词动态分配内存,因此请确保free稍后调用每个单词。

temp或者,您可以利用50 字符数组和硬代码这一事实word来获得相似的大小。

最后一个小点sizeof(char)保证为 1,因此您可以简化malloc计算。

于 2013-04-29T21:50:07.993 回答