1. ホーム
  2. c

[解決済み] C言語でprintfを使用してchar配列を表示するには?[クローズド]

2022-03-06 08:46:12

質問

この結果、セグメンテーションフォールトが発生します。 修正する必要があるのはどのような点ですか?

int main(void)
{
    char a_static = {'q', 'w', 'e', 'r'};
    char b_static = {'a', 's', 'd', 'f'};

    printf("\n value of a_static: %s", a_static);
    printf("\n value of b_static: %s\n", b_static);
}

解決方法は?

掲載されているコードが正しくありません。 a_staticb_static は配列として定義する必要があります。

コードを修正する方法は2つあります。

  • NULLターミネータを追加して、これらの配列を適切なC文字列にすることができます。

    #include <stdio.h>
    
    int main(void) {
        char a_static[] = { 'q', 'w', 'e', 'r', '\0' };
        char b_static[] = { 'a', 's', 'd', 'f', '\0' };
    
        printf("value of a_static: %s\n", a_static);
        printf("value of b_static: %s\n", b_static);
        return 0;
    }
    
    
  • 交互に printf は,null終端でない配列の内容を,precisionフィールドを使用して表示することができます。

    #include <stdio.h>
    
    int main(void) {
        char a_static[] = { 'q', 'w', 'e', 'r' };
        char b_static[] = { 'a', 's', 'd', 'f' };
    
        printf("value of a_static: %.4s\n", a_static);
        printf("value of b_static: %.*s\n", (int)sizeof(b_static), b_static);
        return 0;
    }
    
    

    の後に与えられる精度は . は、文字列から出力する最大文字数を指定する。これは10進数で指定するか,あるいは * として提供され int 引数の前に char のポインタを指定します。