2012-02-03 15 views

答えて

6

あなただけのprintfのフォーマット文字列内のフィールド幅を指定することができます

#include <stdio.h> 

int main(void) 
{ 
    const char *s = "Hello world !"; 
    const int fw = 4; 

    printf("%.*s\n", fw, s); 
    return 0; 
} 

に:あなたは、実行時にフィールド幅を指定したい場合は、

#include <stdio.h> 

int main(void) 
{ 
    const char *s = "Hello world !"; 

    printf("%.4s\n", s); 
    return 0; 
} 

をかいずれの場合も、出力は次のようになります。

Hell 
+0

ああ、私は同じことをしましたが、私は行方不明でした。 %の後でそれは働いていなかった... !! –

2

:異なる文字については

printf ("%c", *str);   // or 
printf ("%c", *(str+0));  // or 
printf ("%c", str[0]); 

、ちょうど手を差し伸べるとオフセットを使用してそれをつかみます。二lのために3オフセット:すべてこれらのソリューションでは

printf ("%.2s", str+3);  // prints "lo" 

:部分文字列の場合は

printf ("%c", str[3]);  // or 
printf ("%c", *(str+3)); 

を、あなたはprintfの最大フィールド幅の機能と一緒にその方法を組み合わせて使用​​することができますヌルターミネータの間違った側で始まらないようにする必要があります。それはあなたが任意の文字列のために動作します一般的なソリューションをしたい場合は

:-)良いこと、そして出発点を見つけるの面で比較的安全である、あなたが使用することができません。

void outSubstr (FILE *fh, char *str, size_t start, size_t sz, int padOut) { 
    if (start >= strlen (str)) { 
     if (padOut) 
      fprintf (fh, "%*s", sz, ""); 
     return; 
    } 

    if (padOut) 
     fprintf (fh, "%-*.*s", sz, sz, str + start); 
    else 
     fprintf (fh, "%-.*s", sz, str + start); 
} 

パラメータは次のとおりです。

  • fhは、書き込み先のファイルハンドルです。
  • strは、文字列の先頭です。
  • startは、印刷を開始するオフセットです。
  • szは、印刷する最大文字数です。
  • padOutは、szの最小値であることを示すフラグです。サイズを満たすのに十分な文字が文字列にない場合、出力には右側のスペースが埋め込まれます。
1

これで最大4文字が印刷されます。

printf("%.4s", str); 
2

あなたのフォーマット文字列内に%c使用することができます。

printf("%c", s[3]); 

プリント 'l' の

-1
numOfChars = 4; 
printf("%.*s\n", numOfChars, "Hello, world!"); 

:任意の文字を印刷するには

printf("%c", *s); 

プリント 'H'

をここで、numOfCharsは印刷したい文字数です。

char *s = "Hello, World!"; 
write(1, s, numberOfChars); 

それともあなたは本当にそれがchar行いたい場合...

int main(void) 
{ 
    char c; 

    c = 'z'; 
    write(1, &c, 1); 
} 

その後のことができます。ここに重いstdioの

は必要ない:システムの

+1

私の編集内容があなたの意図したものであると私は思っています。文字列自体に変数を直接入れることはできません。 '*'を使う必要があります。 – paxdiablo

+0

はい、そうです。プログラミング言語から他の言語への「ジャンプ」は、私を常に混乱させます。ごめんなさい。 – DonCallisto

+1

probsはありません。私が開発していたPerlコードでは一度エラーが発生しました。調査したとき、Pythonで関数全体をコーディングしました:-)気をつけてください。 – paxdiablo

0

本当に苦痛が少ないです文字数:

void printnchars(char *s, int n) 
{ 
    int i; 

    i = 0; 
    while (i <= n) 
    { 
    write(1, s + i, 1); 
    i++; 
    } 
} 
+0

ISO Cには 'write'がありません:-)おそらくあなたは' fputc'を意味しましたか? – paxdiablo

1
there is also a "substr()" function 

that return the substring from complete string. 

example 
printf("%s",substr(str,0,4)); 

it has syntax like this 

substr(arrayName,charStartingPosition, lengthOfCharacters); 

i hope this is easy to understand and no need to write more than 1 statement. 
関連する問題