2012-03-28 7 views
0

多くのファイル(C++)でいくつかの変更を繰り返す必要があります。私はすべてのstrcpy()とstrcat()をsprintf()で置き換える必要があります。私は、変換は次のように行われるだろうと考え出し:フォルダ内のすべてのファイルのコードを変更するにはどうすればいいですか?

strcpy(out,in) would be sprintf(out,%d,in) 

strcat(out,in) would be sprintf(out,out%d,in) 

私は急速にすべての交換を行うために使用することができますどのようなツールを、私は手動でそれを行うことはできませんの9000上がありますこれらを修正する。

ご意見ありがとうございます。

私はこれを行う理由は、我々はコードを変換する方法を実装することを計画していることである

Ubuntuの

のWindows XP/Linuxを使用しています。私たちはstrcatとallを使用しているので、状況変換をうまく機能させることはできません。すべてが書かれたファイルが正しい順序ですべてのものを持っているので、

+0

何らかのideでreg-exを使用して検索して置き換えますか? – relaxxx

+3

[superuser.com](http://superuser.com)に投稿することを検討してください。私も[sed](http://en.wikipedia.org/wiki/Sed)をお勧めします。このタイプの作業のために作られました。 –

+1

[awk](http://en.wikipedia.org/wiki/AWK)や[sed](http://en.wikipedia.org/wiki/Sed)は、このようなことに非常に便利です。 –

答えて

2

コンパイラを使うか、もっと正確にはプリプロセッサを使用します。

具体的には、私はプロジェクト全体ヘッダーを見つけるだろうし、それに似カップルの行を追加します。

#define strcpy(out, in) sprintf(out, "%s", in) 
#define strcat(out, in) sprintf(out+strlen(out), "%s", in) 

...単独でソースコードの残りの部分を残します。その後、あなたが感覚に来るとき、それは賢明に戻って、それがあるべきであるところでstrcpy/strcatを使用することに容易に変わるでしょう。

+0

返信いただきありがとうございます – Franko

+0

@Frankoちょうど明確にするために、彼はあなたにこれをしないように言っています。 –

1

正規表現に従って文字列を置き換えるのに、良いソースエディタ(notepad ++など)を使うべきです。ただし、1つの式で9k行を変更する前に、すべてのファイルを別の場所にバックアップすることを忘れないでください。

よろしく

+1

"1つの式で9k行を変更しようとする前に、別の場所にすべてのファイルをバックアップすることを忘れないでください。むしろバージョンコントロールを使用してください。 –

0

まず第一に、置換は次のようになります。

strcpy(out,in) to sprintf(out, "%s", in) 

strcat(out,in) to do{ int temp = strlen(out); sprintf(out+temp, "%s", in); } while(0) 

第二に、それは、オペレーティングシステムに依存し、この変更を行うこと。あなたがLinuxyツールにアクセスできるLinuxやmacOS、Windowsの場合は、正規表現を取るsedを使うことができます。

通常のウィンドウではわかりません。

+0

あなたは決して 'sprintf'を使うべきではありません。常にsnprintfを好む。サウンド(正しい)ですコード 'strcpy'と' strcat'を使用している場合 –

+0

は一般的に、はい、しかし、次の変換はまた、境界チェックを持っていないにも関わらず、音になります。実際に、この変換を自動的に実行している場合、 'in'と' out'のサイズがわからないため、(少なくとも簡単には) 'sprintf'を使うことはできません。 – Shahbaz

関連する問題