2013-03-08 2 views
1

Я предполагаю прочитать количество потоков, запрошенных клиентом. Так что, если кто-то запустить мою программу, как это:Как читать аргументы программы

./test 2 

Я должен прочитать номер нити, равным 2. Я стараюсь getchar(), но это не работает. Есть идеи?

+0

В этом случае 2 передается в качестве аргумента программе. Попробуйте найти информацию о обработке аргументов в программе на C. – JaredPar

+2

У меня есть идея для вас - прочитайте хотя бы какую-нибудь книгу по программированию на языке C ... – 2013-03-08 22:18:22

+0

Я пробовал argv [0], но он не может читать «2» –

ответ

3

Это не имеет ничего общего с потоками.

Первый аргумент вашей программы, если задан, будет найден в argv[1], но в виде строки, поэтому вам нужно превратить его в целое число с чем-то вроде atoi или strtol.

3

Вот минимальный пример с полными, правильными сообщениями об ошибках и диагностическими сообщениями. Обратите внимание, что настройка 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 
} 
+0

Не будет errno быть нулевым, чтобы начать? – paxdiablo

+0

@paxdiablo: Я положил 'errno = 0', чтобы позволить код кода копироваться и вставляться в разделы, где условие' errno == 0' не гарантируется. Это также означает, что люди, читающие код, не должны проверять окружающий код, чтобы проверить предварительное условие. –

+0

Справедливая точка, это имеет смысл. – paxdiablo

2

int main(int argc, int **argv)

Используя аргументы main, вы должны знать, первый аргумент argv[0] это имя текущего исполняющего файла и следующие аргументы являются параметрами, отправляемые в вашу программу.

В вашем случае вы должны указать argv[1].

Всегда проверяйте argc, чтобы подсчитать введенные аргументы.

Смежные вопросы