私は配列があります。Cでいくつかの文字のみを印刷するには?
printf("%-5s",arr);
しかし、それは文字列全体を印刷している:私は、その文字列の最初の5つの文字を印刷する場合例えば
char arr[]="This is the string";
は、私は次のことを試してみました。どうして?
私は配列があります。Cでいくつかの文字のみを印刷するには?
printf("%-5s",arr);
しかし、それは文字列全体を印刷している:私は、その文字列の最初の5つの文字を印刷する場合例えば
char arr[]="This is the string";
は、私は次のことを試してみました。どうして?
-
正当化、ない精度用のprintfフォーマッタです。
printf("%.5s", arr);
これはarr
の最初の5つの要素が出力されます:あなたが欲しい
は、精度のために使用されている.
フォーマッタです。
printfフォーマッタの詳細については、this linkを参照してください。例えば、サブストリング抽出機能のための
%.*s
を使用すると、printf
を使用すると、目的のバイトサイズが引数としてcharにポインタとして渡されます。例えば、
// It prints This
printf("%.*s", 4, arr);
しかし、それは文字列全体を印刷しています。どうして?
%-5s
を使用しています。つまり、-
は、そのフィールドにテキストを左揃えにします。アンパッサン
、出力はそれは嘲笑思えすることができる場合でも、単にコードスニペットなどとして受け入れ答えを使用することによって達成することができません。
int i;
char arr[]="This is the string";
for (i = 1; i < sizeof(arr); ++i) {
printf("%.*s\n", i, arr);
}
出力:
T
Th
Thi
This
This
This i
This is
This is
This is t
This is th
This is the
This is the
This is the s
This is the st
This is the str
This is the stri
This is the strin
This is the string
は
char *strpart(char *str, char *buff, int start, int end)
{
int len = str != NULL ? strlen(str) : -1 ;
char *ptr = buff;
if (start > end || end > len - 1 || len == -1 || buff == NULL) return NULL;
for (int index = start; index <= end; index++)
{
*ptr++ = *(str + index);
}
*ptr = '\0';
return buff;
}
あなたは、いくつかの方法で非常に単純にそれを行うことができます(バフに部分文字列を抽出します)。ループを実行するたびに、必要な回数ループさせたり、毎回文字を取り除いたりすると、5文字目以降の文字列を一時的にヌル終了するか、strncpy
を使用して5文字をバッファにコピーして印刷することができますそれ。 (おそらく最も単純なものです)。
#include <stdio.h>
#include <string.h>
int main (void)
{
char arr[]="This is the string",
buf[sizeof arr] = ""; /* note: nul-termination via initialization */
strncpy (buf, arr, 5);
printf ("'%s'\n", buf);
return 0;
}
使用例/出力
$ ./bin/strncpy
'This '
ルック物事を超えると、ご質問があれば私に知らせてください。
余分なメモリ消費者:) – snr
Yup - メモリホッグ(全13バイト ':)' –
''%-5s "'は文字列フォーマッタです。文字列を切り捨てません。 –
精度を使用します。 printfのGoogle精度 –
@xingあなたは '.-'構文について確信していますか? AFAIR、 '-'はフラグです...だから... –