4

このようにsprintfを使用している間

sprintf("%.40s",str);

40 の代わりに strlen(str) のような値を指定したいのですが、どうすればよいですか? 40 を strlen(str) に置き換えてみましたが、うまくいきません。のような値を与える

#define len strlen(str)

%.len は " " で使用されているため、%.len の使用も機能しません。

4

3 に答える 3

9

キャラ使い*

sprintf(/* ... */, "%.*s", (int) strlen(str), str);

C99 を使用している場合snprintfも適しています。

man printf (3)
幅はフォーマット文字列では指定されませんが、フォーマットする必要がある引数の前に追加の整数値引数として指定されます。

于 2012-11-08T12:41:16.823 に答える
5

GajananH が指摘するように、これは無意味な試みです。

strlenが機能するにはstr、NULL で終了する必要があります。

strNULL で終了する場合:

sprintf(str2, "%.*s", strlen(str), str);

以下の複雑すぎるだけです:

sprintf(str2, "%s", str);

それ自体は、次の複雑すぎるだけです。

strcpy(str2, str);
于 2012-11-08T14:31:30.160 に答える
2

を使う意味がよくわかりませんstrlen()。機能する場合strlen()、それは文字列が NULL で終了していることを意味し、文字列が NULL で終了している場合は、文字列%sの長さよりも小さい数値を使用しようとしている場合を除き、数値を実際に使用することはありません。

文字列が NULL で終了していない場合strlen()、間違った値が返され、それを使用して%sも役に立ちません。

代わりに、文字列の長さを制限してstrnlen () を使用し、 の戻り値を使用することをお勧めします%s

于 2012-11-08T13:01:53.327 に答える