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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

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

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Q&A

解決済

3回答

2118閲覧

main関数の引数設定についてわからないことがあります。

n6n9Qsmt8gLjwKw

総合スコア29

C

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

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

0グッド

0クリップ

投稿2016/01/19 14:46

編集2016/01/19 14:48

こんにちは
C言語のmain関数の引数の使い方でどうしてもわからないことがあります。

main関数の引数に"SAMPLE"という文字列が指定されたとき関数を呼び出すという処理を行いたいのですが、入門サイトで調べてもよくわからなかったためご教授願いたいです。

visual C++2010を使用しているのですがコマンドオプションで設定する場合、プロジェクトの「プロパティ」→「デバッグ」→「コマンド引数」にSAMPLEという文字列を記述すれば実現できると思ったのですがうまくいきませんでした。

main関数の第一引数が引数の総数、第二引数argv[0]がexeファイルのアドレスなのargv[1]に"SAMPLE"を指定してあげればうまくいくと思ったのですが根本的な考え方から間違っているのでしょうか?
もしくはvisual C++2010のコマンド引数の設定方法が間違っているのでしょうか?

もしそうなら、大変申し訳ないのですがmain関数の引数の原理を教えていただきたいです。

C

1#define _CRT_SECURE_NO_WARNINGS 2#include <stdio.h> 3 4void function(int); 5 6int main(int argc, char *argv[]) 7{ 8 int debag; 9 10 int i; 11 12 printf("引数の総個数 = %d\n", argc); 13 for (i = 0; i < argc; i++) { 14 printf("%d番目の引数 = %s\n", i, argv[i]); 15 } 16 17 if (argv[1] = "SAMPLE") { 18 int a; 19 a = 10; 20 void function(a); 21 22 } 23 24 scanf("%d", &debag); 25 return 0; 26} 27 28void function(int b) { 29 printf("%d", b); 30}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

C、C++の比較演算子は = ではなく == ですね。
また、文字列と言う概念がなく文字配列になるので、
文字列を直接比較するのではなく、比較関数を使います。

C

1if (strcmp(argv[1], "SAMPLE") == 0) {

尚、strcmpはstring.hで定義されています。

C

1#include <string.h>

投稿2016/01/19 15:20

chun

総合スコア324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n6n9Qsmt8gLjwKw

2016/01/20 10:57

chunさん、回答ありがとうございました。 strcmp関数で比較していないことが原因でした。 申し訳ありません、比較演算子はコード添付時に修正していませんでした。 ご迷惑おかけしました。
guest

0

ベストアンサー

こんにちは。

考え方はそれであっています。
たぶん設定先をミスっているのだろうと思います。
ReleaseビルドとDebugビルドで「コマンド引数」に異なる値を設定できますが、普通に設定すると必ずしも現在選択しているビルドになるとは限らないです。
例えば、今Debugを選択していて「コマンド引数」はRelease側を設定するとうまくいかないです。

あと、if (argv[1] = "SAMPLE")では意図通りの判定はできないです。strcmp()等を使うのが定石ですね。

投稿2016/01/19 15:09

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n6n9Qsmt8gLjwKw

2016/01/20 10:54

Chironianさん、回答ありがとうございました。 設定はあっていましたがif文でstrcmp関数を使用した判定を行っていなかったことが原因でした。おかげさまで解決できました。
guest

0

以下の部分ですが、

lang

1if (argv[1] = "SAMPLE") { 2 int a; 3 a = 10; 4 void function(a); 5}

関数functionを呼ぶ際にvoidは不要です。
消さないと実行されません。

また、文字列の比較に関してはChironianさんとchunさんの回答のとおりです。

Cでは0が偽なので、私なら!演算子で書いてしまいますが。

lang

1if (!strcmp(argv[1], "SAMPLE")) {

賛否あるかもしれませんが、私がCを学習した「独習C」ではそのように紹介されていました。

投稿2016/01/19 19:12

thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

n6n9Qsmt8gLjwKw

2016/01/20 11:01

thom.jpさん、回答ありがとうございました。 voidをつけているのは削除忘れでした。 申し訳ありません。strcmpを使用して解決できました。 ==0判定ではなく!演算子で行うやり方もあるのですね! 今回は==0で判定して解決しましたがとても参考になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問