15

したがって、特定のバイト数(または長さ)の文字列があります。文字列の最後に NULL ターミネータがないため、バイトと言います。でも、紐の長さは分かります。通常、ご存知のようprintf("%s", str);に、 NULL 文字になるまですべてのバイトを出力し続けます。NULL で終了しない C 文字列がないことはわかっていますが、もの (具体的には文字列ではない) を格納しているという奇妙な状況があり、NULL は格納しませんが、「もの」の長さは格納します。

ここに小さなサンプルがあります:

char* str = "Hello_World"; //Let's use our imagination and pretend this doesn't have a NULL terminator after the 'd' in World
long len = 5;

//Print the first 'len' bytes (or char's) of 'str'

私はあなたがこのようなことをすることが許されていることを知っています:

printf("%.5s", str);

しかし、その状況では、私は 5 をハードコーディングしていますが、私の状況では、5 は変数にあります。私はこのようなことをします:

printf("%.(%l)s", len, str);

しかし、私はあなたがそれを行うことができないことを知っています. しかし、私が達成しようとしていることのアイデアを提供します。

4

3 に答える 3

38

printf("%.*s", len, str);

また、NULL で終了しない C 文字列はありません。

于 2013-03-13T03:57:24.893 に答える
2

あなたはこれを行うことができます:

for (int i =0; i<len; i++)
{
    printf("%c", str[i]);
}

印刷に必要な長さだけループして、同じ行にそれらを印刷します。

于 2013-03-13T05:43:10.297 に答える