c
1#include <stdio.h> 2#include <time.h> 3 4void put_date(struct tm *timer) { 5 char *wday_name[] = {"日", "月", "火", "水", "木", "金", "土"}; 6 7 printf("%4d年%02d月%02d日(%s)%02d時%02d分%02d秒", 8 timer->tm_year + 1900, 9 timer->tm_mon + 1, 10 timer->tm_mday, 11 wday_name[timer->tm_wday], 12 timer->tm_hour, 13 timer->tm_min, 14 timer->tm_sec 15 ); 16} 17 18 19int main(void) 20{ 21 time_t current; 22 struct tm *timer; 23 24 time(¤t); 25 timer = localtime(¤t); 26 27 printf("現在の日付・時刻は"); 28 put_date(timer); 29 printf("です。\n"); 30 31 return 0; 32} 33
↑これは正しいコードです。
put_data関数の中で、char *wday_name[]....というところがあります。
「なんで関数の中で新しく宣言したchar型変数がポインターとして宣言されているのだろう。。。」と思い、試しに、下のようにコードを書き換えてみました。
c
1#include <stdio.h> 2#include <time.h> 3 4void put_date(struct tm *timer) { 5 char wday_name[] = {"日", "月", "火", "水", "木", "金", "土"}; 6 7 printf("%4d年%02d月%02d日(%s)%02d時%02d分%02d秒", 8 timer->tm_year + 1900, 9 timer->tm_mon + 1, 10 timer->tm_mday, 11 wday_name[0], 12 timer->tm_hour, 13 timer->tm_min, 14 timer->tm_sec 15 ); 16} 17 18 19int main(void) 20{ 21 time_t current; 22 struct tm *timer; 23 24 time(¤t); 25 timer = localtime(¤t); 26 27 printf("現在の日付・時刻は"); 28 put_date(timer); 29 printf("です。\n"); 30 31 return 0; 32} 33
しかし、これだとコンパイルが通りません。エラー文を読むとどうやら「wday_nameはint型だよ!」
と表示されます。
error
16-1.c:7:35: warning: format ‘%s’ expects argument of type ‘char *’, but argument 5 has type ‘int’ [-Wformat=] 2 7 | printf("%4d年%02d月%02d日(%s)%02d時%02d分%02d秒", 3 | ~^ 4 | | 5 | char * 6 | %d 7...... 8 11 | wday_name[0], 9 | ~~~~~~~~~~~~ 10 | | 11 | int 12
なぜ、関数内で変数をchar型で宣言したのにint型とみなされてしまうのでしょうか?
よろしくお願いいたします。
環境
ubuntu 20.04.1
コンパイラ gcc
回答2件
あなたの回答
tips
プレビュー