【问题标题】:Output parameters of 2d char arrays for a function函数的二维字符数组的输出参数
【发布时间】:2012-11-13 11:46:56
【问题描述】:

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

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

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

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

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

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

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];
    }
}

【问题讨论】:

  • char ** firstTokens 被称为指向(在您的情况下)char 的指针。除非您为其分配内存,否则会出现未定义的行为。
  • 没有为fscanf()的目标分配内存。
  • 不幸的是,strtok 无法对 '\0' 字符进行标记。它想要一个正确的 C 字符串作为它的最后一个参数,这意味着它在那个字符上 end。所以你只标记'.' 字符。

标签: c compiler-errors segmentation-fault


【解决方案1】:

您需要为tempFirsttempMiddletempLast 分配存储空间。 fscanf 会写入这些指针,假设您已经为它们提供了足够的内存。

#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);

【讨论】:

  • 所以我为它分配了适当的内存,现在它可以编译了。又出现了一个问题:如果我要调用 print 语句,例如: for(i = 0; i
  • 您应该使用firstTokens[i] = strtok(... 进行分配吗?即不要取消引用firstTokens[i]
  • 所以我为它分配了适当的内存,现在它可以编译了。又出现了一个问题:如果我要调用打印语句,例如:` for(i = 0; i
猜你喜欢
  • 1970-01-01
  • 2012-11-08
  • 2021-03-17
  • 2023-04-09
  • 1970-01-01
  • 2021-03-28
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多