文字列の一部のみを印刷する方法はありますか?
たとえば、私が持っている場合
char *str = "hello there";
"hello"
印刷したい部分文字列は可変長であり、必ずしも5文字ではないことを念頭に置いて、単に印刷する方法はありますか?
for
ループを使用できること、または配列をコピーしてからnullターミネータを追加できることは知っていputchar
ますが、もっとエレガントな方法があるかどうか疑問に思っていますか?
これを試して:
int length = 5;
printf("%*.*s", length, length, "hello there");
これも機能します:
fwrite(str, 1, len, stdout);
フォーマット指定子を解析するオーバーヘッドはありません。明らかに、部分文字列の先頭を調整するには、ポインタにインデックスを追加するだけです。
印刷する文字列の部分を複製するために使用できますが、ソース文字列でターミネータが検出されない場合はstrncpy
、ヌルターミネータを追加しないように注意する必要があります。strncpy
Jerry Coffinが指摘したように、より良い解決策は、適切な*printf
関数を使用して、必要な部分文字列を書き出すかコピーすることです。
strncpy
慣れていない人にとっては危険ですが、フォーマット文字列を処理するオーバーヘッドがないため、//スタイルのソリューションと比較して実行時間の点で高速になる可能性がありますprintf
。できれば避けることをお勧めしますが、念のために知っておくことをお勧めします。sprintf
fprintf
strncpy
size_t len = 5;
char sub[6];
sub[5] = 0;
strncpy(sub, str + 5, len); // char[] to copy to, char[] to copy from(plus offset
// to first character desired), length you want to copy
printfとその仲間は、部分的な文字列を処理したいだけの場合にうまく機能しますが、より一般的な解決策としては次のようになります。
char *s2 = s + offset;
char c = s2[length]; // Temporarily save character...
s2[length] = '\0'; // ...that will be replaced by a NULL
f(s2); // Now do whatever you want with the temporarily truncated string
s2[length] = c; // Finally, restore the character that we had saved