【发布时间】:2014-04-20 06:54:24
【问题描述】:
我正在再次编码,现在将一个文件拆分为一行,并将每一行拆分为一个 char 数组,所以我尝试下一个代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void)
{
int i=0;
char value[3][1024];
char (*p)[1024] = value;
char *p1;
char *array[4];
char line[1024];
FILE *fp=fopen("data1.txt", "r");
if(fp==NULL){
printf("\nThe file does not exist\n");
}
else{
while( fgets ( line, sizeof(line), fp ) != NULL )
{
strcpy(p[i],line);
printf ("%s",p[i]);
printf("\n");
i++;
}
}
i = 0;
p1 = strtok(value[i]," ");
while (p1 != NULL)
{
array[i++] = p1;
p1 = strtok (NULL, " ");
}
printf("%s\t\n", array[0]);
}
当我得到输出时,一切似乎都很好,我文件中的行(一个存储数字的 char 数组)被复制到 p[i]。如果我打印 p[0], p[1] 我得到完整的行。后来我尝试将该行拆分为长度为 4(3 减去 '\0')的字符数组。 strtok 必须使用值之间的制表符空间拆分 value[i]。据此,如果我打印 array[0],我必须只在我的 char 数组中获得第一个值,但我再次获得完整的行 o.O.
我想也许我在 p[i] 处没有 '\0' 或者我使用 strtok 错误。有什么想法吗?现在我正在尝试打印每个值以了解我存储了哪些值,但一切似乎都很好。我会切换到 GDB,也许我会发现我的价值观有些奇怪。
输入文件由制表符空格分隔。
55 2 3 44
1000 33 4 5
【问题讨论】:
-
输入文件是什么样的?
-
哦,小精灵,你已经醒了吗? :),我得到:55-2-3-44\n1000-33-4-5\n 在尝试拆分数组并打印数组 [0] 后,我得到:1000-33-4-5 所以不是拆分数组。我必须得到 1000。如果我更改 i=1,我必须得到 55,但我得到整行。
-
没有空格隔开。
-
对不起,在我的文件中,“-”是一个空格,我在这里显示符号,因为它删除了所有非代码格式的样式。
-
它对我来说很好用。 ideone.com/bJmpVL