我有一个包含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_r 的可重入版本 strtok 将字符串的元素分成标记。您可以循环调用strtok_r,在每个标记上调用 atoi ,然后将标记添加到该行的数组中。
strtok_r的使用模式与strtok几乎相同,但是它具有一个额外的参数来表示 token 生成器的当前状态。常规的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/

10-13 06:18