null
で終了していない文字列があり、その正確なサイズがわかっているとします。Cでprintf
を使用してその文字列を印刷するにはどうすればよいでしょうか。私はそのような方法を思い出しますが、今はわかりません...
Printfには可能性があり、次のようになります。
printf("%.*s", stringLength, pointerToString);
何もコピーする必要も、元の文字列やバッファを変更する必要もありません。
%.*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
は左揃えになります。Fwrite()を使用して標準出力にできます!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
この方法で、最初の文字(number_of_chars変数で定義された数値)をファイルに、この場合はstdout(標準出力、画面)に出力します!
printf("%.*s", length, string)
は機能しません。
これは、最大長のバイトを出力することを意味しますOR nullバイト、どちらか先に来た方。nullで終了していないchar 、続行しません。
printf("%.5s", pointerToNonNullTerminatedString);
文字列の長さは5になります。
#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;
}