我有一个包含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/