输入文件:
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()将其分解为令牌,并将其存储到功能类似于2d数组的双指针(客户)中,但是在while循环退出后,我无法访问此“ 2d数组”中的每个单独的令牌,可以使用
访问它的整行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
非常感谢您的帮助!
答案 0 :(得分:0)
字符串存储为字符数组char*
。由于您的数组customers
的类型为char**
,并且您想使用customers[z][i]
访问字符串,因此customers
的类型必须为char***
。从行字符串填充数组时,请使用
p = strtok(line, " ");
while (p != NULL)
{
customers[z][i] = p;
i++;
p = strtok (NULL, " ");
}
一个问题将是malloc
,因为您不知道每个字符串的确切长度。