C -2D char阵列动态实现故障



这是代码段。字典格式为:{Word Word n Word Word n ...}

该程序在第二次重新分配2D阵列Rowords时似乎失败了,我不能这么做。

在声明中:char ** rowords = null,** enwords == null;

while (fgets(buffer, 100, dictionary))
    {
        counter++;
        roWords = (char**)realloc(roWords, sizeof(char*)* counter );
        enWords = (char**)realloc(enWords, sizeof(char*)* counter );
        p = strtok(buffer, " n");

        roWords[counter - 1] = NULL;
        roWords[counter - 1] = (char*)realloc(roWords, sizeof(char)* strlen(p));
        strcpy(roWords[counter - 1], p);

        p = strtok(NULL, " n");

        enWords[counter - 1] = NULL;
        enWords[counter - 1] = (char*)realloc(enWords, sizeof(char)* strlen(p));
        strcpy(enWords[counter - 1], p);

    }

解决方案是:

while (fgets(buffer, 100, dictionary))
{
    counter++;
    if (counter == 1)
    {
        roWords = (char**)malloc(sizeof(char*));
        enWords = (char**)malloc(sizeof(char*));
    }
    else
    {
        roWords = (char**)realloc(roWords, sizeof(char*)* counter);
        enWords = (char**)realloc(enWords, sizeof(char*)* counter);
    }
    p = strtok(buffer, " n");

    roWords[counter - 1] = (char*)malloc(sizeof(char) * (strlen(p) + 1));
    strcpy(roWords[counter - 1], p);
    roWords[counter - 1][strlen(p)] = '';
    p = strtok(NULL, " n");

    enWords[counter - 1] = (char*)malloc(sizeof(char)* (strlen(p) + 1));
    strcpy(enWords[counter - 1], p);
    enWords[counter - 1][strlen(p)] = '';
}

最新更新