c - 逐行读取文件并将字符串拆分为c中的标记

标签 c file

我正在逐行读取文件并将字符串拆分为标记。

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

问题是什么?

最佳答案

你的问题(再次)是你没有为数组分配足够的空间,并覆盖了它的末尾。具有讽刺意味的是,在这种情况下,您甚至不需要分配任何(额外的)数组。 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);
    }
}

关于c - 逐行读取文件并将字符串拆分为c中的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421310/

相关文章:

c - 简单的C字符问题

c - 当我使用 int array[10] = {0}; 初始化时,数组存储在哪里?

c - 如何正确地为 C 中的结构数组分配内存?

C、fork()中的一些语句没有执行

android - 从android中的sdcard读取特定文件

php - 有没有办法直接从 cPanel 文件管理器中的 URL 上传文件

java - File.length() 返回 0

C#加载文件所花费的时间

JSON 输入文件中的 Java 对象

c - base64的解码表构造