前提・実現したいこと
テキストファイルを別の空ファイルにコピーしつつ、指定した行に文字列を挿入するプログラムです。
デバッグをするとreturn文の後の}でエラーが起きます。
何がダメなのかご教授願います。
プログラミングの途中なので
/**/コメントが所々なのはご容赦ください...。
プログラミング歴2週間です。
発生している問題・エラーメッセージ
Run-Time Check Failure#2-Stack around the variable 'fp' was corrupted.
該当のソースコード
C言語
1#include <stdio.h> 2int main ( ) 3{ 4 FILE* fp; 5 FILE* fp2; 6 char file_name [ 30 ]; 7 char str [ 256 ]; 8 int row; /* 指定行数 */ 9 int nr = 0; 10 int ch; 11 12 printf ( "ファイル名を入力\n" ); /* ファイル名を入力する処理 */ 13 scanf_s ( "%s" , file_name , 256 ); 14 printf ( "挿入する位置を入力(行数)\n" ); /* 挿入する行数を入力する処理 */ 15 scanf_s ( "%d" , &row ); 16 printf ( "挿入する文字列を入力\n" ); /* 挿入する文字列を入力する処理 */ 17 scanf_s ( "%s" , str , 256 ); 18 19 fopen_s ( &fp , file_name , "r" ); 20 if ( fp == NULL ) 21 { 22 return 0; 23 } 24 25 fopen_s ( &fp2 , "test2.txt" , "a" ); 26 if ( fp2 == NULL ) 27 { 28 return 0; 29 } 30 31 while ( ( ch = fgetc ( fp ) ) != EOF ) 32 { 33 fputc ( ch , fp2 ); 34 if ( ch == '\n' ) 35 { 36 nr++; 37 } 38 if ( nr == row - 1 ) 39 { 40 fputs ( str , fp2 ); 41 fputc ( '\n' , fp2 ); 42 nr++; 43 } 44 } 45 46 fclose ( fp ); 47 fclose ( fp2 ); 48 49 return 0; 50}
試したこと
元が長文ファイルですが、短文にしてみてもだめでした。
ファイルの最後で改行した場合もしなかった場合もだめでした。
補足情報(FW/ツールのバージョンなど)
visual studio 16.6.4
Microsoft Visual C++2019
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/20 01:53