2017-07-27 3 views
2

私は配列があります。Cでいくつかの文字のみを印刷するには?

printf("%-5s",arr); 

しかし、それは文字列全体を印刷している:私は、その文字列の最初の5つの文字を印刷する場合例えば

char arr[]="This is the string"; 

は、私は次のことを試してみました。どうして?

+1

''%-5s "'は文字列フォーマッタです。文字列を切り捨てません。 –

+1

精度を使用します。 printfのGoogle精度 –

+1

@xingあなたは '.-'構文について確信していますか? AFAIR、 '-'はフラグです...だから... –

答えて

3

-正当化、ない精度用のprintfフォーマッタです。

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

これはarrの最初の5つの要素が出力されます:あなたが欲しい

は、精度のために使用されている.フォーマッタです。

printfフォーマッタの詳細については、this linkを参照してください。例えば、サブストリング抽出機能のための

4

%.*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 
+0

'*'を使って表示する文字数を動的に選択できるようにするとうれしいです – Garf365

+0

引用符間の精度を使用すると、時にはうまくいかない場合があります。マクロ定義 '#define ....'のように@ Garf365 – snr

0

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; 
} 
+1

この場合、この解決策は望ましくないと思います – horro

+0

@horroなぜですか?彼は**タイトルの状態として文字列の**一部を印刷したいと思う。 –

+1

最低在庫を使用して最高のものを作るエンジニア。 – snr

0

あなたは、いくつかの方法で非常に単純にそれを行うことができます(バフに部分文字列を抽出します)。ループを実行するたびに、必要な回数ループさせたり、毎回文字を取り除いたりすると、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 ' 

ルック物事を超えると、ご質問があれば私に知らせてください。

+2

余分なメモリ消費者:) – snr

+0

Yup - メモリホッグ(全13バイト ':)' –

関連する問題