2009-11-20 2 views
5
で文字列

は、通常は、このようなC言語で文字列を印刷することができます。..フォーマットC

printf("No record with name %s found\n", inputString); 

しかし、私はそれのうち、文字列を作りたいと思って、私はそれをどのように行うことができますか?私はこのような何かを探しています。..

char *str = ("No record with name %s found\n", inputString); 

私は私が探しています何明らかであると思います...

+3

が自分に好意を行います&買いに行くKernigham&リッチーによる「プログラミング言語C」を見つけると確信しています。 – Pete

+1

おかげでPete、そうです。 – itsaboutcode

+0

http://www.eskimo.com/~scs/cclass/cclass.html –

答えて

31

をそのようちょうどprintfように動作しますが、かかる一つの選択肢sprintfを使用することですが、最初のパラメータは結果の文字列を配置するバッファへのポインタです。

snprintfを使用することをお勧めします。これは、バッファオーバーランを防ぐためにバッファの長さを含む追加のパラメータを使用します。例:

char buffer[1024]; 
snprintf(buffer, 1024, "No record with name %s found\n", inputString); 
3

sprintf(下記参照)を調べます。

int n = sprintf(str, "No record with name %s found\n", inputString); 
3

使用

sprintf(str, "No record with name %s found\n", inputString); 
10

あなたは機能のsprintf家族を探しています。彼らの一般的な形式は次のとおりです。

char output[80]; 
sprintf(output, "No record with name %s found\n", inputString); 

しかし、それだけでsprintf極めて危険です。これは、バッファオーバーランと呼ばれるものになりがちです。これは、sprintfがあなたが提供する文字列がどれくらい大きいかわからないことを意味します。したがって、利用可能な文字列よりも多くのデータを喜んで書くでしょう。たとえば、これはきれいにコンパイルされますが、有効なメモリ—を上書きしてsprintfが、それは間違って何をやっていることを知らせる方法がないでしょう。

char output[10]; 
sprintf(output, "%s", "This string is too long"); 

ソリューションは、長さをとる、snprintfとしての機能を使用することですパラメータ:

char output[10]; 
snprintf(output, sizeof output, "%s", "This string is too long, but will be truncated"); 

か、Windowsシステムにしている場合、いずれかの入力または出力文字列の溢れから保護_sntprintf変種や友人を、使用します。

+3

宿題に関する質問として、私はちょうど 'sizeof output'はcharの中の* elements *の数を与えることを指摘したいと思います'array - 通常は、さまざまな型のサイズに依存することなく動作する' sizeof array/sizeof array [0] 'を使用することです。さらに、 'char'配列に対しても動作します。 :) –

+0

良い点。しかし、実際には配列に関数を渡すなど、いくつかの実際のケースでは失敗する可能性があります。現時点ではsizeof配列は要素の数とサイズに関係なく4または8ですそこに。本当の解決策は、 'std :: vector'やそれに類するものを使用して、全体的な混乱を完全に避けることです。 –

7

これは宿題です(それにタグを付けていただきありがとうございます)。...printf()ファミリの機能を詳しく見てください。

私はあなたのソリューション:)

+3

まあ、それは発見の喜びをあなたから奪われた他の人たちのように見えます:) –

+1

+1とにかく宿題に関する正しい答えを与えるための+1。 –

関連する問題