c - 理解 C 语言的文件解析器

标签 c function parsing pointers struct

我得到了这个文件解析器来帮助解析文件并将输入拆分为结构数组。我的问题是我不完全理解第二个参数以及它如何与我的结构交互。最好有一个解释,因为我确信我稍后能弄清楚如何将输入放入数组中。

这是解析函数:

void parseLine(char toParse[], struct Weather *toLoad) {
    char *theToken;

    theToken = strtok(toParse, ",");
    toLoad->location = theToken[0];
    theToken = strtok(NULL, ",");
    toLoad->daynum = atoi(theToken);
    theToken = strtok(NULL, ",");

    if (theToken != NULL) {
        toLoad->temp = atof(theToken);
    } else {
        toLoad->temp = -400;
    }

    theToken = strtok(NULL, ",");

    if (theToken != NULL) {
        toLoad->precip = atof(theToken);
    } else {
        toLoad->precip = -1.0;
    }
}

这是我的结构:

struct Weather {
    char location;
    int daynum;
    double temp;
    double precip;
};

这个解析器从我的文件中获取一行(toParse),然后将其分割,但我的问题是第二个参数如何工作,我应该将什么传递给函数?

文件中的示例输入如下所示:

Saskatoon,2,-6.4,0

非常感谢任何帮助。谢谢!

最佳答案

第二个参数是所谓的输出参数。您传入一个指向结构的指针,函数将用操作的结果填充它。它基本上是你的“返回值”。

例如,如果您想使用返回值返回错误代码,则可以使用此技术。或者,如果您想由调用者而不是被调用的函数进行内存分配。

关于c - 理解 C 语言的文件解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824263/

相关文章:

parsing - 单值上下文中的多值 strconv.ParseInt()

java - 正在解析HH :mm (with two digits minute) to LocalTime with JodaTime

c - 指向字符串 : Access issues 的指针数组

c - 使用命名管道进行进程间通信的通知

c - 需要帮助来理解此代码的 Big-O 复杂性的答案

c++ - 返回 ostream 的函数

java - android 的 mediawiki 语法分析器

c - 如何使用在 Modelica 中调用的两个 C 函数之间使用的全局变量?

javascript - 从函数内访问循环变量

c - 这个程序有什么作用? (自调用main函数+getchar)