-1
1つのファイルから別の文字にコンテンツをコピーする方法はわかっていますが、単語ごとにそれを行うことになっています。私はこのコードを試しましたが、これを実行すると、出力ファイルは新しい行の各単語を持つことになります。あるファイルから別のファイルに内容をコピーするにはどうしたらいいですか?Cで単語ごとに1つのファイルから別の単語に内容をコピーする方法は?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
// Error checking
if(argc < 3)
{
fprintf(stderr, "Please print two arguments");
exit(EXIT_FAILURE);
}
char* input = argv[1];
char* output = argv[2];
char buffer[4096];
FILE* fp_open = fopen(input, "r");
if(fp_open == NULL) fprintf(stderr, "Unable to open input file");
FILE* fp_write = fopen(output, "w");
if(fp_write == NULL) fprintf(stderr, "Unable to open output file");
while(fscanf(fp_open, "%s", buffer) == 1)
{
fprintf(fp_write,"%s\n", buffer);
}
fclose(fp_open);
fclose(fp_write);
return 0;
}
注:私は、入力ファイルからの読み込みのためfscanf("%s")
を使用させていただいております。
P.S.私はそれが非効率的なやり方であることも知っていますが、これは私がやるべきことです。
エラーメッセージを改行で終了します。エラーメッセージに、オープンできないファイルの名前を含めます。開いていないファイルを開いたまま使用しないでください。たいていの場合、単語間のスペースが重要な場合、または改行を正確に追跡する必要がある場合は、 'sscanf()'を使用することはできません。 '%s'だけでなく、'%c'やそれに類するもの(例えばgetc()など)を使用することが許されていれば、あなたは立ち往生しています。あなたが見つけることができるツールを使用することは許されていないからです。 –
フォーマット:注意してください。しかし、それを行う方法はありませんか?最初に一行全体を取得し、それを単語単位でスキャンして、スペースで区切るなどしますか? – posixKing
はい。 ['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)(または ['getline()'](http://)でそれを行う方法がありますpubs.opengroup.org/onlinepubs/9699919799/functions/getline.html)を使用して、 ['sscanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions /sscanf.html)をループで使用します([ループで 'sscanf()'を使う方法を参照してください)(http://stackoverflow.com/questions/3975236/how-to-use-sscanf-in-loops))。しかし、 'fscanf(fp、"%s "、buffer)'が唯一許されている入力機構としてぎっしり詰まっていると、私はあなたが縛られていると思います。 –