我正在逐行读取文件并将字符串拆分为标记。
int main()
{
FILE* fp;
char line[255];
fp = fopen("file.txt" , "r");
while (fgets(line, sizeof(line), fp) != NULL)
{
char val1[16];
char val2[9];
strcpy(val1, strtok(line, ","));
strcpy(val2, strtok(NULL, ","));
printf("%s|%s\n", val1, val2);
}
}
我的输入文件内容(file.txt)
182930101222, KLA1512
182930101223, KLA1513
182930101224, KLA1514
182930101225, KLA1515
我打印时获取
| KLA1512
而不是
182930101222| KLA1512
问题是什么?
答案 0 :(得分:5)
你的问题(再次)是你没有为数组分配足够的空间,并覆盖它的结尾。具有讽刺意味的是,在这种情况下,您甚至不需要分配任何(附加)数组。 strtok()
标记了line[]
数组,用'\0'
个字符覆盖分隔符,这些符号足以满足您的需求。
int main()
{
FILE* fp;
char line[255];
fp = fopen("file.txt" , "r");
while (fgets(line, sizeof(line), fp) != NULL)
{
const char* val1 = strtok(line, ",");
const char* val2 = strtok(NULL, ",");
printf("%s|%s\n", val1, val2);
}
}
答案 1 :(得分:0)
fgets
插入换行符
只需将val2
尺寸增加1,即val2[10]
或删除尾随'\n'
while( fgets(line, sizeof(line), fp) != NULL ){
char val1[16] ,val2[9];
char *pos;
if ((pos=strchr(line, '\n')) != NULL)
*pos = '\0';
strcpy(val1 , strtok(line,","));
strcpy(val2 , strtok(NULL,","));
printf("%s|%s\n",val1, val2);
}