1. ホーム
  2. c

[解決済み] printfによる文字列と文字

2022-03-03 02:35:26

質問

の使い方に戸惑いました。 %c%s を次のC言語で作成します。

#include <stdio.h>
    
void main()
{
    char name[]="siva";
    printf("%s\n",name);
    printf("%c\n",*name);
}

出力は

siva
s

文字列ではポインタは不要なのに、文字%cを表示するためにポインタが必要な理由

を使用すると、エラーが発生します。

printf("%c\n", name);

エラーは

str.c: In function ‘main’:
str.c:9:2: warning: format ‘%c’ expects type ‘int’, but argument 2 has type ‘char *’

解決方法は?

これを試すと

#include<stdio.h>

void main()
{
 char name[]="siva";
 printf("name = %p\n", name);
 printf("&name[0] = %p\n", &name[0]);
 printf("name printed as %%s is %s\n",name);
 printf("*name = %c\n",*name);
 printf("name[0] = %c\n", name[0]);
}

出力は

name = 0xbff5391b  
&name[0] = 0xbff5391b
name printed as %s is siva
*name = s
name[0] = s

つまり、'name'は実際にはメモリ上の文字の配列へのポインタなのです。0xbff5391b にある最初の 4 バイトを読んでみると、's', 'i', 'v', 'a' と表示されるでしょう。

Location     Data
=========   ======

0xbff5391b    0x73  's'  ---> name[0]
0xbff5391c    0x69  'i'  ---> name[1]
0xbff5391d    0x76  'v'  ---> name[2]
0xbff5391e    0x61  'a'  ---> name[3]
0xbff5391f    0x00  '\0' ---> This is the NULL termination of the string

ある文字を表示するには、その文字の値をprintfに渡す必要があります。値はname[0]または*nameとして参照できます(配列の場合はname = &name[0] ですので)。

文字列を表示するには、printfに文字列へのポインタを渡す必要があります(この場合、'name' または '&name[0]' となります)。