可変長引数の個数の取得

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

可変長引数の個数の取得

#1

投稿記事 by shosinsha » 1年前

C言語における可変長引数についての質問です。

可変長引数があるとき、
C言語では"stdarg.h"を利用すると思います。

この時、"va_arg"を利用して引数を取り出しますが、
可変長引数が何個あるかわからない場合にその個数を取得する関数、
もしくは方法などあれば教えていただきたいです。

このコードの場合だと、関数"argTest"の引数"types"を利用して
引数の数を指定するしかないのでしょうか?

しかし、そうしたとしても指定された引数の数と
実際に存在する引数の数を確認できなければ無意味だと思うのです...
引数の数知りたい...

コード:

#include <stdarg.h>
#include <stdio.h>

void argTest(char*, ...);

int main(void) {
    argTest("abc", 1, 2, 3, 4);

    return 0;
}

void argTest(char *types, ...) {
    va_list list;

    va_start(list, types);

    // 引数の数を超えて取り出してみる
    // この時、特にエラーや終了などはせずに、謎の数字が表示されていることから
    // 無関係のメモリ領域にアクセスしてしまっている気がする...
    // 引数で個数を指定してもそれが間違っていた場合、これだと回避できない
    for(int i = 0; i < 5; i++) {
        printf("%d\n", va_arg(list, int));
    }

    va_end(list);
}


box
記事: 2002
登録日時: 13年前

Re: 可変長引数の個数の取得

#2

投稿記事 by box » 1年前

C言語 可変長引数 個数
あたりのキーワードでググってみると、
解決への道が開けるかもしれませんし、開けないかもしれません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

shosinsha

Re: 可変長引数の個数の取得

#3

投稿記事 by shosinsha » 1年前

あー!目的の物出てきました!
ずっと「va_arg 仕様」とか「stdarg 仕様」とかで調べてたw

ありがとうございます
box さんが書きました:
1年前
C言語 可変長引数 個数
あたりのキーワードでググってみると、
解決への道が開けるかもしれませんし、開けないかもしれません。

返信

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