hageking
@hageking

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

テキストファイルで指定した一行を削除する

Q&A

Closed

解決したいこと

テキストファイルで指定した一行を削除するプログラムを作っています。
テキストファイルの行を二行目以降にすると三行目と二行目が合わさって表示されてしまいます。
解決方法を教えてください。

該当するソースコード

main.cpp
#include <stdio.h>

int line_delete(int delete_line)
{
    int i;
    int line = 0; // 行数
    char arr[100][50];
    FILE *f;

    // ファイル開く
    f = fopen("./sample.txt", "r");
    if (f == NULL)
    {
        printf("load error");
        return -1;
    }

    // arr配列に1行ずつ格納
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]) && fgets(arr[i], sizeof(arr[i]), f); i++)
    {
        line++; // テキストファイルの行数
    }

    // ファイル閉じる
    fclose(f);

    // 特定の行(4行目)を削除
    arr[delete_line][1] = '\0'; // 消したい行の先頭文字を\0にする

    // ファイル開く
    f = fopen("./sample.txt", "w");
    if (f == NULL)
    {
        printf("load error");
        return -1;
    }

    // ファイル書き込み
    for (i = 0; i < line; i++)
    {
        if (arr[i][0] != '\0')
        {
            fputs(arr[i], f);
        }
    }

    // ファイル閉じる
    fclose(f);
    return 0;
}

int main(void)
{
    line_delete(1);

    return 0;
}

実行前

sample.txt
1
2
3
4
5
6

実行後

sample.txt
1
23
4
5
6

参考リンク

0

1Answer

    arr[delete_line][1] = '\0'; // 消したい行の先頭文字を\0にする

先頭は [1] ではなく [0] ですよ。

2Like

Comments

  1. @hageking

    Questioner

    あ、ソースコードいじってたの忘れてました、、、w
    これからは気をつけます。
    ありがとうございました。

Your answer might help someone💌