2

我希望您能为我正在为作业编写的程序的这种方法提供一些输入和二维数组。编程语言是 CI 得到了一些输入参数:

FILE * ifp = 输入文件指针,在main中打开,打开一个txt文件,格式为每行3个字符串

char ** firstTokens, middleTokens = 2 维 char 数组,我希望它们保留前两个字符串减去每个字符串末尾的预期标点符号(例如逗号和句点)。计划作为输出参数。

char * lastLetter = txt 文件中每行最后一列中任何字符串的第一个字母。计划作为输出参数。

int numberOfLines = 我希望从文本文件中读取的行数

这是我的主函数中对方法的调用:

readLine(ifp, firstTokens, middleTokens, lastLetter, numberOfLines);

我认为我的问题在于正确获取firstTokensmiddleTokens,因为我总是在编辑中遇到编译器错误和分段错误。对错误的一些帮助/澄清将不胜感激。

void readLine(FILE * ifp, char ** firstTokens, char ** middleTokens, char* lastLetter, int numberOfLines)
{
    char* tempFirst;
    char* tempMiddle;
    char* tempLast;
    char delim[4];
    delim[0] = '.';
    delim[1] = '\0';
    delim[2] = '\n';
    delim[3] = ',';
    int i;

    for(i = 0; i < numberOfLines; i++)
    {
        fscanf(ifp, "%s %s %s", tempFirst, tempMiddle, tempLast);
        *firstTokens[i] = strtok(tempFirst, delim);
        *middleTokens[i] = strtok(tempMiddle, delim);
        lastLetter[i] = tempLast[0];
    }
}
4

1 回答 1

1

您需要为 、 和 分配tempFirst存储tempMiddle空间tempLastfscanf写入这些指针,假设您已经为它们提供了足够的内存。

#define MAX_NAME_LEN (20) /* change this as required */
...
char tempFirst[MAX_NAME_LEN];
char tempMiddle[MAX_NAME_LEN];
char tempLast[MAX_NAME_LEN];
...
fscanf(ifp, "%s %s %s", tempFirst, tempMiddle, tempLast);
于 2012-11-13T11:49:57.050 回答