2012-03-29 12 views
-2

私はC++を初めて使っています。私は大きなプロジェクトで繰り返し修正する必要があります。私はstrcpyメソッドとstrcatメソッドをすべて取ってsprintfに変換しなければなりません。そのコードの動作を行い、Strcpyとstrcatをsprintfに変更するには

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

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

最初の質問:私は基本的に、変換が可能だろうと考え出しましたか?

2番目の質問は、outとin変数が数値であり、%sの代わりに%dを使用する必要があるということは絶対にありません。

3番目の質問では、outとinの変数は、変更したいすべてのコードでメソッドの繰り返しごとに異なるため、変更は変数名に柔軟にする必要があります。私はそれを行うことができますどのような方法ですか?それはVisualStudio 98プロジェクトです...しかし、私はLinuxのubuntuとWindows XPです。

お時間をありがとうございます。

ああ、私は戻って私のファイルで構成された心配しないでください:D

+2

注意: 'strcpy'と' strcat'はCの文字列で動作するCライブラリ関数です。 C++の 'string'クラスを見てください。 –

+0

[フォルダ内のすべてのファイルのコードを変更するにはどうすればいいですか?](http://stackoverflow.com/questions/9914259/how-can-i-modify-code-of-all-files-in-folders) –

+1

「私はC++には新しく、大きなプロジェクトでも繰り返し修正する必要があります」 - 災害のための良いレシピのように聞こえる。 –

答えて

0

...これをしたいと思う理由は明らかではない

をしかしこと、それが得るようなものを見てからそれは最初の作品です。 2つ目はdo {}を必要としませんが、その周りには(0)を置きます。代わりに{}を使用してtmpをローカルに保つことができます。しかし、それは動作するように見えます。または、使用することができます

sprintf(out, "%s%s", in); 

と自分自身を保存することができます。

しかし、これらの方法の主な関心事は、バッファオーバーフローをチェックしていないことです。その結果を保持するのに十分な大きさでない場合はどうなりますか?もちろん、それは元のコードで発生する可能性がありますので、おそらくチェックされています。

0

最初の質問ですが、そのコードは機能しますか?

はい、しかし、単純:

strcat(out, in) -> sprintf(out + strlen(out), in) 

2つ目の質問は、アウトと変数には、数値ことができることを、私は%sの代わりに%dを使用する必要があろうと絶対に方法はありません、 右?

いいえ - strcpystrcatは文字列のコンテンツでのみ機能します。

変更する変数は、変更したいすべてのコードでメソッドの繰り返しごとに異なるため、変更は変数名に柔軟にする必要があります。私はそれを行うことができますどのような方法ですか?それはVisualStudio 98プロジェクトです...しかし、私はLinuxのubuntuとWindows XPです。

これは難しいことです... regexpの置換を使用することはできますが、実際には奇妙なコードでは失敗する可能性があります。また、プリプロセッサとハッシュ定義を使用することもできますが、インクルード展開を無効にしたい場合は、プリプロセッサが通常作成する余分なシンボルをすべてサイレントに作成します。プリプロセッサのコマンドラインスイッチでサポートされるかどうかは、 。

いくつのインスタンスを変更する必要がありますか?あまりにも多くない場合は、正規表現を試して、手動で検討することができます....

+0

これは、多くの異なるファイルに手作業で検証する方法ですが、実際にどのような種類のエラーが#define strcpy(out、in)sprintf(out、 "%s"、in)になるのかわかりません。 #私のプロジェクトのヘッダーにstrcat(out、in)sprintf(out + strlen(out)、 "%s"、in)を定義します。外出先を柔軟にする方法はありますか?実際のコードには何がありますか? – Franko

+0

@Franko:#defineを使用すると、 "in"と "out"という言葉だけでなく、それぞれの使用時点で実際のソースコードのテキストに置き換えられます。試してみてください。 –

+0

それは動作します、いくつかのバグが現れましたが、私はちょうどバッファが十分に大きいことを確認する方法を作った。問題はまだ検出されていません。 – Franko

関連する問題