1

クライアントから要求されたスレッド数を読み取ることになっています。したがって、誰かが私のプログラムを次のように実行した場合:

./test 2

2に等しいスレッドの数を読み取る必要があります。試しgetchar()ましたが、機能しません。何か案が?

4

3 に答える 3

4

以下は、完全で正しいエラー チェックと診断メッセージを含む最小限の例です。errno範囲エラーを有効な出力と区別するために 0に設定する必要があることに注意してくださいstrtoul()。これは関数の厄介な癖です。

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{
    if (argc != 2) {
        fputs("usage: test NTHREAD\n", stderr);
        exit(1);
    }
    char *e;
    errno = 0;
    unsigned long nthread = strtoul(argv[1], &e, 0);
    if (!*argv[1] || *e) {
        fputs("error: invalid NTHREAD\n", stderr);
        exit(1);
    }
    if (nthread == (unsigned long) -1 && errno == ERANGE) {
        fputs("error: NTHREAD out of range\n", stderr);
        exit(1);
    }
    // Your code goes here
}
于 2013-03-08T22:24:30.280 に答える
3

これはスレッド自体とは何の関係もありません。

プログラムの最初の引数は、指定されている場合は文字列として検出されるため、またはargv[1]のような整数に変換する必要があります。atoistrtol

于 2013-03-08T22:26:07.153 に答える
2

int main(int argc, int **argv)

の引数を使用すると、最初の引数が現在実行中のファイルの名前であり、次の引数がプログラムに送信されるパラメーターであるmainことがわかります。argv[0]

あなたの場合、読む必要がありますargv[1]

argc入力された引数をカウントするために常にチェックします。

于 2013-03-08T22:24:55.467 に答える