【发布时间】:2019-02-11 07:21:04
【问题描述】:
输入文件:
s0 0 3 0 10
s1 0 6 0 20
s2 0 5 0 11
s3 0 6 0 20
s4 67 2 0 25
s5 5 4 0 1
s6 0 2 0 5
s7 0 4 0 28
s8 0 3 0 20
s9 45 5 0 6
s10 103 3 0 2
代码:
char ** customers;
char *p;
customers = (char **)malloc(50 * sizeof(char *));
for (int i = 0; i < 50; i ++)
{
customers[i] = (char *)malloc(5 * sizeof(char *));
}
int z = 0;
while ((nread = getline(&line, &len, stream)) != -1)
{
int i = 0;
p = strtok (line, " ");
while (p != NULL)
{
customers[z][i] = *p;
i++;
p = strtok (NULL, " ");
}
z++;
}
printf("%s\n", customers[0]);
所以本质上,我正在读取 txt 输入文件的每一行,使用 strtok() 将其分解为标记,并将它们存储到一个双指针(客户)中,其功能类似于二维数组,但在 while 循环退出后,我无法访问这个“二维数组”中的每个单独的令牌,我可以使用
访问它的整行printf(“%s\n”, customers[0])
outputs:
s0301
但这只会打印每个标记的第一个字符而不是整个字符串。 如何访问完整的标记化字符串,例如这样
printf(“%s\n”, customers[0][0])
printf(“%s\n”, customers[0][1])
printf(“%s\n”, customers[0][2])
printf(“%s\n”, customers[0][3])
printf(“%s\n”, customers[0][5])
outputs:
s0
0
3
0
10
非常感谢任何帮助!
【问题讨论】:
-
现在您只存储第一个字符。
*p是令牌的第一个字符,customers[z][i]是一个字符的存储空间。 -
如果您想要一组客户记录,请从定义
srruct customer开始。一份客户记录应包含哪些内容? -
@n.m.来自 Java 和 C++ 背景,过去只使用向量,所以我在这里尝试用 C 做同样的事情。切换使用 struct 解决了我的问题,所以干杯!
标签: c pointers multidimensional-array malloc strtok