ページ 11

関数、引数について

Posted: 2020年7月03日(金) 21:35
by bybykin
現在本を見ながらc言語の関数と引数について勉強しているのですが、その本に載っているプログラミングを
そのまま入力してもエラーが出てしまいます。
原因はその本で推奨している環境(virtual boxとbagrant)と自分の環境(visual studio)の違いによるもの
だと思うのですが、もしvisual studioでもこのプログラミングが動かせるような設定の変更などを
知っている方がいたらと思い投稿しました。
一度見ていただけたら嬉しいです。

結果が↓のようになると思うんですが、エラーが出てしまいます。

関数を呼び出します
岬さんこんにちは
赤城さんこんにちは
海道さんこんにちは

コード:


#include <stdio.h>



typedef char String[1024];


void hello(String name) 
{
	printf("%sさんこんにちは",name);
}



int main(void){

	printf("\n関数呼び出し\n");
	hello("岬");                  
	hello("赤城");
	hello("海道");

	rewind(stdin);
	getchar();
	return 0;
}


Re: 関数、引数について

Posted: 2020年7月04日(土) 11:34
by Rittai_3D
どういったエラーが出ていますか?
当方Windowsの環境がないので確認ができませんが、表示されたエラーを正確に載せていただけると原因が調べやすくなります。
結果が↓のようになると思うんですが、エラーが出てしまいます。

関数を呼び出します
岬さんこんにちは
赤城さんこんにちは
海道さんこんにちは
hello()内のprintf()に改行コードがないので、改行されません。

Re: 関数、引数について

Posted: 2020年7月04日(土) 13:37
by Butter
typedef char String[1024];

typedef const char* String;
に変えて見てはいかがでしょうか
(初心者なので見当違いなことを言っているかも知れません)

Re: 関数、引数について

Posted: 2020年7月04日(土) 14:47
by あたっしゅ
 Visual Studio 2019(VS2019) だと、

>E0167 型 "const char *" の引数は型 "char *" のパラメーターと互換性がありません

と出ます。下線が引かれている E0167 をクリックすると、ネット検索されます。で、一番最初に出てきた

https://teratail.com/questions/118636
const char*とchar*の互換性 - teratail(ja)

には、

>古い C++ (いわゆる C++03) では文字列リテラルを char* に変換するのが許されていたのですが、
>後に (C++11 で) 廃止されたという経緯があります。 更に Visual Stuido はユーザへの便宜のために
>かなり後まで変換を許すように実装していたらしいです。

と、あります。VS2019 では、許さないようになったのでしょう。

 参考になされた本が古いようです。

 解決方法は、

#3>typedef char String[1024];
#3>を
#3>typedef const char* String;

や、元のソースをできるだけ生かすなら、

typedef const char String[1024];

でしょうか。

Re: 関数、引数について

Posted: 2020年7月08日(水) 03:22
by box
エラーが出てしまいます。
質問するときの基本事項
単に「エラーが出る」だけでは、何のことやらわかりません。
質問者さんのパソコン画面を見ることができませんので。
肝心なのは「何をしたときに」「どんな」エラーが出るかを「具体的に」書くことです。
そうすれば、回答しようとしている人に質問者さんの状況がかなりハッキリわかると思いますので、
解決への時間が少なくて済むと思います。

Re: 関数、引数について

Posted: 2020年7月14日(火) 20:41
by bybykin
みなさんありがとうございます!!
アドバイスいただいた通り、

typedef char String[1024];

typedef const char* String;
もしくは
typedef const char String[1024];

に変更でエラーなく実行できました!

少し前に返信していたと思ったんですがエラーかなんかで
できていなかったようです申し訳ありません(^^;

ご意見いただいた通り次からは出たエラーも記載します。
またアドバイスいただけたら嬉しいです!
よろしくお願いします。