テキストファイルで指定した一行を削除する
解決したいこと
テキストファイルで指定した一行を削除するプログラムを作っています。
テキストファイルの行を二行目以降にすると三行目と二行目が合わさって表示されてしまいます。
解決方法を教えてください。
該当するソースコード
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