argc argvの宣言

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
chibago

argc argvの宣言

#1

投稿記事 by chibago » 9年前

お久しぶりです。chibagoです。
c++でとあるライブラリを使おうと思っております。

サンプルでは、

コード:

int main(int argc, char* argv[]){

lis_initialize(&argc, &argv);

のようになっています。ただ、比較的大きなプログラム
を作っており、このように、argc, argvを直接
受け渡すのは不合理ですし、処理の内容に合わせて、
プログラム実行時の引数ではなく、直接的に、
argvを作成して初期化関数に渡したいと考えております。

そこで、呼び出すクラスのメンバ変数として

コード:

int argc;
char argv[1000];
として定義し、

コード:

lis_initialize(&this->argc, &this->argv);
のように与えております。

ただ、コンパイルすると

コード:

: cannot convert ‘char (*)[1000]’ to ‘char***’ for argument ‘2’ to ‘int lis_initialize(int*, char***)’
となります。

どのように定義すればよいのでしょうか。

ポインタ周りはどうしても理解ができなくて
困っております。

ご指導いただければ幸いです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: argc argvの宣言

#2

投稿記事 by h2so5 » 9年前

そのまま定義するだけです。

コード:

int argc;
char* argv[1000];

chibago

Re: argc argvの宣言

#3

投稿記事 by chibago » 9年前

すみません、
やってみましたが今度は、
: cannot convert ‘char* (*)[1000]’ to ‘char***’ for argument ‘2’ to ‘int lis_initialize(int*, char***)’
となりました。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: argc argvの宣言

#4

投稿記事 by h2so5 » 9年前

間違えました。もうひとつ変数が必要ですね。

コード:

int argc;
char* argv[1000];
char** a = argv;
lis_initialize(&argc, &a);

chibago

Re: argc argvの宣言

#5

投稿記事 by chibago » 9年前

h2so5さん、
ありがとうございました。

argvの引き渡しには成功したのですが、
宣言を変えた関係でargvの合成部分が
うまくいかなくなってしまいました。

自分なりにいろいろ試してみましたが、
うまくいきませんのでご教授いただければ
幸いです。

char argv[1000]としていたときは、

コード:

    std::string arg = "dummy.exe";
    arg.copy(argv, arg.size(), 0);
が問題なくコンパイルできましたが、
char* argv[1000]に変更した関係で、

コード:

: no matching function for call to ‘std::basic_string<char>::copy(char* [1000], std::basic_string<char>::size_type, int)’
となっております。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: argc argvの宣言

#6

投稿記事 by h2so5 » 9年前

chibago さんが書きました: 自分なりにいろいろ試してみましたが、
うまくいきませんのでご教授いただければ
幸いです。
必要なのは試すことではなくポインタについて正しく理解することです。
今はコンパイルエラーで済んでいますが、ポインタまわりのバグは厄介なので理解しないままCのAPIを使おうとすると確実に問題が起きます。

コード:

char* argv[1000];
std::string arg = "dummy.exe";
argv[0] = &arg[0];

chibago

Re: argc argvの宣言

#7

投稿記事 by chibago » 9年前

h2so5さん、
ありがとうございました。

おっしゃることはごもっともです。

汎用性がありつつも低レベルの実装に煩わされたくないと
思いC++を選び、プログラミングの内容もアルゴリズムに
学術性を求めるもの書いている関係上、ポインタ周りの
問題は深入りしたくないという意識が働いていたと思います。

今後は、理解を深めるように心がけたいと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る