#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);
}
C言語における可変長引数についての質問です。
可変長引数があるとき、
C言語では"stdarg.h"を利用すると思います。
この時、"va_arg"を利用して引数を取り出しますが、
可変長引数が何個あるかわからない場合にその個数を取得する関数、
もしくは方法などあれば教えていただきたいです。
このコードの場合だと、関数"argTest"の引数"types"を利用して
引数の数を指定するしかないのでしょうか?
しかし、そうしたとしても指定された引数の数と
実際に存在する引数の数を確認できなければ無意味だと思うのです...
引数の数知りたい...
[code]
#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);
}
[/code]