質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • C

    3448questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • アルゴリズム

    380questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

C言語で文字列表記の日付からその曜日を求めるコードのエラー

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 241

ranranway

score 198

前提・実現したいこと

C言語で文字列表記の日付からその曜日を求めるコードを書いています。以下のように実行されて欲しいです。

./trial.c 2018/01/10
2018/01/10 is Wednesday

発生している問題・エラーメッセージ

参考サイトで紹介されていたコードを実行してみましたが、コンパイル時にエラーが出てしまいました。
参考サイト

% gcc -Wall trial.c -o trial
trial.c: In function ‘main’:
trial.c:12:3: warning: implicit declaration of function ‘memset’ [-Wimplicit-function-declaration]
   memset(&tm, 0, sizeof(tm));
   ^
trial.c:12:3: warning: incompatible implicit declaration of built-in function ‘memset’
trial.c:12:3: note: include ‘<string.h>’ or provide a declaration of ‘memset’

該当のソースコード

/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* functions */
int GetDayOfWeek(int year, int month, int day);
void DisplayWeek(int wday);

/* main */
int main(void) {
    int year = 2009;
    int month = 4;
    int day = 20;
    int week;

    /* 日付の表示 */
    printf("%d/%d/%d: ", year, month, day);

    /* 曜日を求める */
    week = GetDayOfWeek(year, month, day);

    /* 曜日の表示 */
    DisplayWeek(week);

    return EXIT_SUCCESS;
}

/**
 * 曜日を求める
 * @param[in] year 年
 * @param[in] month 月
 * @param[in] day 日
 * @return 曜日(0を日曜日とする. エラー時は-1を返す)
 */
int GetDayOfWeek(int year, int month, int day) {
    struct tm time_in, *local;
    time_t t;

    /* 年月日を入力 */
    time_in.tm_year = year - 1900; /* 年 */
    time_in.tm_mon  = month - 1; /* 月 */
    time_in.tm_mday = day; /* 日 */

    /* 時分秒曜日を適当に入力 */
    time_in.tm_hour = 1; /* 時 (適当に入力)  */
    time_in.tm_min  = 0; /* 分 (適当に入力)  */
    time_in.tm_sec  = 0; /* 秒 (適当に入力)  */
    time_in.tm_wday = 0; /* 曜日 (適当に入力) */
    time_in.tm_yday = 0; /* 1月1日からの日数 (適当に入力) */

    /* mktime 関数で変換 */
    if ( (t = mktime(&time_in) ) == (time_t)(-1) ) {
        return -1;
    }

    /* 地方時に変換 */
    local = localtime(&t);

    return local->tm_wday;
}

/**
 * 曜日を表示する
 * @param[in] wday 曜日(0を日曜日とする)
 */
void DisplayWeek(int wday) {
    char weeks[][16] = {
        "Sunday",
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday"
    };

    printf("%s\n", weeks[wday]);
}

補足情報(言語/FW/ツール等のバージョンなど)

GNU Emacs 24.5.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

  • warningはエラーとは違います
  • 該当のソースとして貼られたソースが問題部分のない別物です
  • メッセージを読む努力をしましょう

参考に適当訳すると

trial.c: In function ‘main’:

trial.c: 関数'main'において

trial.c:12:3: warning: implicit declaration of function ‘memset’ [-Wimplicit-function-declaration]

trial.c:12行:3文字目: 警告: 関数'memset'の暗黙の関数宣言[-Wimplicit-function-declaration]

trial.c:12:3: warning: incompatible implicit declaration of built-in function ‘memset’

trial.c:12行:3文字目: 警告: ビルトイン関数'memset'の非互換な暗黙の関数宣言

trial.c:12:3: note: include ‘<string.h>’ or provide a declaration of ‘memset’

trial.c:12行:3文字目: メモ: '<string.h>'のインクルードもしくは'memset'の宣言をしよう


暗黙の関数宣言(implicit function declaration)

(少し古い)C言語は関数の宣言なしに関数を呼び出すと
「int型を返しいくつか(もしくは0個の)引数を取る関数」が宣言されているものとして扱います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 08:05

    ご回答と丁寧なご説明をいただきましてありがとうございました。

    キャンセル

+2

エラーじゃなくて警告ですね。エラーと警告の区別は付けましょう。
そこに書いてある通り、#include <string.h>すればいいのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 01:21

    メッセージのどの辺の意味がわからなかったのかを書くと、今後のためにもっと役に立つアドバイスが得られるかも知れません。

    キャンセル

  • 2018/01/10 08:05

    ご回答と的確なアドバイスをいただきましてありがとうございました。

    キャンセル

+1

つ#include <string.h>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/10 08:05

    ご回答いただきましてありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    明解Java入門編演習9−3

    この演習はDayクラスを使わずに行う演習なのでしょうか? Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。 また、もしDayクラスを

  • 解決済

    現在の日時の取得、使い方がわかりません

    現在パネルにカレンダーを作る事をしているのですが、 一応出力はできているのですがよく分からない月からしか出力されませんどこを直せばいいでしょうか? お願いいたします。

  • 解決済

    呼び出すメソッドで戻り値を変えたい

    CalendarClassを使って、1年分の日付を取得するPGを作ってます。 メソッドに返す戻り値を変える良い方法はありませんか。 例えば、mainClassでthisMo

  • 解決済

    pythonにおける時刻のソート

    単純な質問です。 python3において、時刻のデータが以下のように与えられたとき古い順に並べなおすような操作はどのようなコード、または関数を用意すればできるのか教えてくださ

  • 解決済

    縦型のカレンダーを出力したい PHP

    最終的には画像のように送信ボタンを押したら、選択年月が曜日と合わせて テーブルで出力されるカレンダーを作りたいのですが、 月初の曜日を月末まで連続して出力する処理の書き方がわか

  • 解決済

    jQueryでの年計算について

    jQueryでプルダウンの年計算を作っているのですがどうしてもわからないところがあります。 $(function() { for (var i = 2017; i >= 190

  • 解決済

    指定日が第何週目かを返したい

     前提・実現したいこと 53週目の追加とうるう年からずれる週を直したい。 たとえば表示週テストにて「console.log(schedule(new Date(2022,1,21)

  • 受付中

    PHPでカレンダーを作成しているのですが・・・

    前回の質問ではたくさんの回答者さんによる回答ありがとうございます。 その時のプログラムと大して変わらないとは思いますが、表示する日付をプルダウンメニューにより指定し、表示ボタンを押

同じタグがついた質問を見る

  • C

    3448questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • アルゴリズム

    380questions

    アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。