• ベストアンサー

間接操作のレベルとは

C言語初心者です。 現在、yyyymmdd型での入力のテストを作っています。 しかし 「'convert_time':'tm *(char *)'は'int ()'と間接操作のレベルが異なります。」 とエラー表示が出てコンパイルできません。 プログラムは以下に示すとおりです。 #include <stdio.h> #include <time.h> char jikan; char a; int main (void){ printf("yyyymmdd型で入力してください"); scanf("%c",jikan); a = convert_time(jikan); printf("%s",a); } struct tm* convert_time(char* yyyymmdd){ struct tm* time; char yyyy[5]; char mm[3]; char dd[2]; strncpy(yyyy, yyyymmdd, 4); yyyy[5] = '\0'; mm[0] = yyyymmdd[4]; mm[1] = yyyymmdd[5]; mm[2] = '\0'; dd[0] = yyyymmdd[6]; dd[1] = yyyymmdd[7]; time = malloc(sizeof(struct tm)); time->tm_sec = 0; time->tm_min = 0; time->tm_hour = 0; time->tm_mday = atoi(dd); time->tm_mon = atoi(mm) - 1; time->tm_year = atoi(yyyy) - 1900; return time; } ご回答よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

問題点1 >printf("yyyymmdd型で入力してください"); >scanf("%c",jikan); yyyymmdd形式での入力を求めているのに、書式文字列が"%c"である。 問題点2 >char jikan; yyyymmdd形式での入力を求めているのに、そのための領域を1バイトしか確保していない。 問題点3 >scanf("%c",jikan); scanf()の第2引数がポインタでない。 問題点4 >a = convert_time(jikan); convert_time()を、宣言せずに呼び出している。 問題点5 >a = convert_time(jikan); >struct tm* convert_time(char* yyyymmdd){ 呼び出す箇所と関数の実体とで、引数の型が異なっている。 問題点6 >char a; >printf("%s",a); 変数の型と書式文字列で想定している型とが食い違っている。 問題点7 >a = convert_time(jikan); >struct tm* convert_time(char* yyyymmdd){ 呼び出す箇所と関数の実体とで、戻り値の型が食い違っている。 問題点8 >strncpy(yyyy, yyyymmdd, 4); >time = malloc(sizeof(struct tm)); >time->tm_mday = atoi(dd); 必要なヘッダーファイルをインクルードしていない。 ザッとこんなところでしょうか。もっとあるかもしれません。

TKYJ08
質問者

お礼

様々なご指摘ありがとうございます。 型のところがまだまだ理解が不十分でした。 解決いたしました。ありがとうございます。

その他の回答 (1)

  • goosyu
  • ベストアンサー率58% (36/62)
回答No.1

コンパイルのエラー原因は・・・ convert_time()関数のプロタイプ宣言が無い為です。 main()関数より前に,次の様なプロトタイプ宣言を追加して下さい。 struct tm* convert_time(char*);

TKYJ08
質問者

お礼

ありがとうございます。 ひとつ解決しました。

関連するQ&A

専門家に質問してみよう