1

stdarg.h を使用する C で次のコードを実行しようとしましたが、何らかの理由で動作しません。可変引数リストを使用した経験がないので、誰か助けてください!

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

int add_stuff_together(int numb_count, ...);

int main()
{
    int x = add_stuff_together(2, 1, 1);

    printf("%i", x);

    return 0;
}

int add_stuff_together(int numb_count, ...)
{
    int sum, repeat_times;
    va_list args;
    va_start(args, numb_count);

    for (repeat_times = 0; repeat_times < numb_count; repeat_times++)
    {
        sum = sum +  va_arg(args, int);
    }
    return sum;
}

私が得る出力は次のとおりです: 172998379

誰かがなぜ私がこの答えを得たのか説明してもらえますか?

4

4 に答える 4

4

sumで初期化しないadd_stuff_together()ため、初期値は未指定です。ゼロに初期化する必要があります。int sum = 0;

于 2013-07-28T12:12:54.633 に答える
4

変数sumは初期化されていないため、その値はデフォルトで何にでも設定できます。

また、va_end()マクロを使用しないことに注意してください。使用する必要があります。

于 2013-07-28T12:13:34.193 に答える
1

sum数値を追加する前に、ゼロに初期化する必要があります。

int sum = 0, repeat_times;

それ以外の場合、開始値は任意です。

于 2013-07-28T12:12:45.627 に答える
1

これを試して

int add_stuff_together(int numb_count, ...)
{
    int sum = 0;           //initializing sum to 0.
    int repeat_times;
    va_list args;
    va_start(args, numb_count);

    for (repeat_times = 0; repeat_times < numb_count; repeat_times++)
    {
        sum = sum +  va_arg(args, int);
    }
    return sum;
}

初期化せずに使用sumすると、奇妙な出力が発生するため、出力が得られます172998379。これは、メモリからガベージ値 (その場所に格納されている以前の値) を取得するためです。

于 2013-07-28T12:14:18.207 に答える