c - 从 C 中的文本文件中读取列

标签 c

我有一个包含 100 行和 512 列的文本文件,每列由制表符分隔:

row1    00  00  20  00  11  00  00  00  00  10
        00  11  00  55  77  00  00  70  21  00
        90  ...

我想通读每一行并将值存储在数组中的每一列中。

我不想使用 sscanf 来分隔变量,因为它需要创建另外 500 个变量。
如果我使用fgets,我可以获得整行,但是如何用空格分隔列并将它们存储在数组中?

谢谢。

最佳答案

您可以使用 strtok_rstrtok 的可重入版本, 将字符串的元素分隔成标记。你可以在循环中调用strtok_r,调用atoi在每个标记上,并将标记添加到该行的数组中。

strtok_r 的使用模式与 strtok 几乎相同,但它有一个额外的参数来表示分词器的当前状态。常规 strtok 将该状态保存在静态内存中,使函数不可重入。

const char *term = "\t\n\r "; // word terminators
char str[] = "quick brown fox jumps over the lazy dog";
char *state; // Invocation state of strtok_r
char *tok = strtok_r(str, term, &state); // First invocation is different
while (tok) {
        printf("%s\n", tok);
        tok = strtok_r(NULL, term, &state); // subsequent invocations call with NULL
}

关于c - 从 C 中的文本文件中读取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10711277/

相关文章:

c - 通过相互依赖和外部变量将 CUDA 代码与 C 代码链接起来

c - 我的 10 线音频播放器

c++ - 以编程方式禁用多核

c++ - C/C++ 中的 sizeof char* 数组

c - 在循环中使用scanf()和gets()读取用户输入不起作用

c - 缺少最后一个字符

python - 将结构传递给 ctypes 中的 dll(免费)

c - 从 C 中的链表中删除包含字符串的节点

c - 轻量级正则表达式解析器

c++ - 手动创建PE