null
終端されていない文字列があり、その正確なサイズがわかっているとしましょうprintf
。Cでその文字列をどのように印刷できますか?そのような方法を思い出しましたが、今はわかりません...
null
終端されていない文字列があり、その正確なサイズがわかっているとしましょうprintf
。Cでその文字列をどのように印刷できますか?そのような方法を思い出しましたが、今はわかりません...
回答:
printfには可能性があります。次のようになります。
printf("%.*s", stringLength, pointerToString);
何もコピーする必要も、元の文字列やバッファを変更する必要もありません。
printf
〜10年後のような基本的なことについて学ぶとき、私はそれが大好きです... :)
printf
は、最大11文字、または NULLに遭遇するまで、どちらか早い方で出力されます。あなたの例ではNULLが最初に来ます。最大長を指定しても、NULLがの「文字列の終わり」の意味を失うことはありませんprintf
。
これがどのように%.*s
機能するか、そしてそれがどこに指定されているかの説明です。
printfテンプレート文字列の変換仕様は、一般的な形式を持っています。
% [ param-no $] flags width [ . precision ] type conversion
または
% [ param-no $] flags width . * [ param-no $] type conversion
2番目の形式は、引数リストから精度を取得するためのものです。
'*'の精度を指定することもできます。これは、引数リストの次の引数(出力される実際の値の前)が精度として使用されることを意味します。値は整数でなければならず、負の場合は無視されます。
— glibcマニュアルの出力変換構文
以下のために%s
文字列の書式、精度は特別な意味を持っています:
書き込む文字の最大数を示す精度を指定できます。それ以外の場合、文字列内の終端のnull文字を含まない文字は、出力ストリームに書き込まれます。
— glibcマニュアルの他の出力変換
その他の便利なバリエーション:
"%*.*s", maxlen, maxlen, val
右揃えし、前にスペースを挿入します。"%-*.*s", maxlen, maxlen, val
左揃えになります。"%-*.*s", padding, str_view.size(), str_view.data()
fwrite()を使用してstdoutできます!
fwrite(your_string, sizeof(char), number_of_chars, stdout);
このようにして、最初の文字(number_of_chars変数で定義された数)をファイルに出力します。この場合は、標準出力(標準出力、画面)に出力します。
printf("%.*s", length, string)
動作しないでしょう。
これは、最大で長さバイトまたはnullバイトのいずれか早い方を出力することを意味します。nullで終了していないcharのarray-of-charに長さより前のnullバイトが含まれている場合、printfはその長さで停止し、続行しません。
#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;
}
C
、コンテキスト、すべての文字列がnullで終了しています。nullを含まないcharの配列は文字列ではありません...それらはcharの配列です:)