来自输入文件的动态分配

时间:2013-04-29 21:43:00

标签: c malloc strcpy

请考虑以下事项:

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

2 个答案:

答案 0 :(得分:2)

c字符串的类型为char *。当你说

char word;

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

char* word;

不要忘记设定计数。

此外,您可能想要注意,您从未读过10行以上,否则会出现另一个内存错误。

答案 1 :(得分:1)

您希望将word用作字符串。字符串是以空值终止的字符数组,因此您需要为其指定类型char*。由于您是为每个单词动态分配内存,因此请务必稍后在每个单词上调用free

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

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