web-dev-qa-db-ja.com

null以外の終端文字列でのprintfの使用

nullで終了していない文字列があり、その正確なサイズがわかっているとします。Cでprintfを使用してその文字列を印刷するにはどうすればよいでしょうか。私はそのような方法を思い出しますが、今はわかりません...

93
whoi

Printfには可能性があり、次のようになります。

printf("%.*s", stringLength, pointerToString);

何もコピーする必要も、元の文字列やバッファを変更する必要もありません。

158
DarkDust

%.*s動作し、指定されている場所。

Printfテンプレート文字列の変換仕様の一般的な形式は次のとおりです。

% [ param-no $] flags width [ . precision ] type conversion

または

% [ param-no $] flags width . * [ param-no $] type conversion

2番目の形式は、引数リストから精度を取得するためのものです。

「*」の精度を指定することもできます。これは、引数リストの次の引数(実際に出力される値の前)が精度として使用されることを意味します。値は整数である必要があり、負の場合は無視されます。

出力変換構文 glibcマニュアル

ために %s文字列のフォーマット、精度には特別な意味があります。

書き込む文字の最大数を示す精度を指定できます。そうでない場合、文字列内の終端のヌル文字までの文字は、出力ストリームに書き込まれます。

その他の出力変換 glibcマニュアル

その他の便利なバリアント:

  • "%*.*s", maxlen, maxlen, valは、前にスペースを挿入して右揃えします。
  • "%-*.*s", maxlen, maxlen, valは左揃えになります。
22
Tobu

Fwrite()を使用して標準出力にできます!

fwrite(your_string, sizeof(char), number_of_chars, stdout);

この方法で、最初の文字(number_of_chars変数で定義された数値)をファイルに、この場合はstdout(標準出力、画面)に出力します!

20
Pedro Sousa

printf("%.*s", length, string)は機能しません。

これは、最大長のバイトを出力することを意味しますOR nullバイト、どちらか先に来た方。nullで終了していないchar 、続行しません。

8
Todd Freed
printf("%.5s", pointerToNonNullTerminatedString);

文字列の長さは5になります。

2
codeDom
#include<string.h> 
int main()
{
/*suppose a string str which is not null terminated and n is its length*/
 int i;
 for(i=0;i<n;i++)
 {
 printf("%c",str[i]);
 }
 return 0;
}

コードを編集しましたが、別の方法があります:

#include<stdio.h>
int main()
{
printf ("%.5s","fahaduddin");/*if 5 is the number of bytes to be printed and fahaduddin is the string.*/

return 0;

}
1
Fahad Uddin