アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
}

ご回答よろしくお願い致します。

A 回答 (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);

必要なヘッダーファイルをインクルードしていない。


ザッとこんなところでしょうか。もっとあるかもしれません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/10 13:54

コンパイルのエラー原因は・・・


convert_time()関数のプロタイプ宣言が無い為です。
main()関数より前に,次の様なプロトタイプ宣言を追加して下さい。
struct tm* convert_time(char*);
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/09/10 13:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています