3

ファイルを 1 行ずつ読み取り、文字列をトークンに分割しています。

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

どうした ?

4

2 に答える 2

6

あなたの問題は(再び)、配列に十分なスペースを割り当てておらず、配列の最後を上書きしていることです。皮肉なことに、この場合、(追加の) 配列を割り当てる必要さえありません。 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);
    }
}
于 2013-08-24T17:52:54.500 に答える
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);           
}
于 2013-08-24T17:52:16.830 に答える