2015-08-21 2 views
-5

У меня проблема с аргументами командной строки. Мне нужно написать программу, которая будет подсчитывать размер элементов каждого аргумента командной строки, переданного в массиве argv. Простой код выглядит следующим образом.Количество элементов аргументов командной строки

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    int i = 0; 
    for (i = 0; i < argc; i++) 
    { 
     printf("%lu\n", sizeof(argv[i])); 
    } 

    return 0; 
} 

Я понимаю, что это неправильно и что «argv» представляет собой массив указателей на строку. Я также попытался добавить звездочку, но в результате она вернула «1» (байт), потому что я сказал «перейдите на этот адрес» и показал мне размер первого элемента каждого аргумента командной строки. Итак, как я могу решить эту проблему без многих и многих циклов, только с функцией «sizeof»?

UPD: Извините за ошибку "% s". В фактическом коде я его не писал.

И я понимаю, что sizeof() не приносит мне размер массива. Я указывал на комбинацию «sizeof()/sizeof (char)»

Также большое спасибо за напоминание «strlen». Я сейчас учусь. Я еще не знаю языка C. Извините, за мои глупые ошибки.

+0

Что вы подразумеваете под «размером элементов каждого аргумента командной строки»? Можете ли вы привести пример? –

+3

Вы должны использовать функцию, которая дает длину c-строки, sizeof всегда будет возвращать размер указателя. – Borgleader

+2

'sizeof' is * not * предназначен для указания размера строки. Фактически 'sizeof' оценивается во время компиляции, чтобы он вообще не работал. Вместо этого используйте 'strlen' (в cstring) или' std :: string :: size' (в строке). – Caninonos

ответ

3

Вы печатаете размер указателя на символ. Вместо этого вам нужна длина строки. Вы можете использовать стандартную функцию strlen:

(примечание: argv[0] является само название программы, поэтому первое число указывает длину имени программы.)

#include <stdio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    int i = 0; 
    for (i = 0; i < argc; i++) 
    { 
     printf("%zu\n", strlen(argv[i])); 
    } 

    return 0; 
} 
+3

'% zu' лучше – artm

+2

Первое, что будет напечатано, это длина имени программы, которая может быть не такой, какой вы хотите. –

+0

обновление ответа .. @ ChrisDrew – Dipto

0

Вместо sizeof использования strlen(), который возвращает размер строка, исключая символ окончания строки из подсчета. Дополнительная информация здесь: Strlen

0

Как видно из вашей программы, более точные из декларации основных аргументов имеют тип char *. То есть они являются указателями на первые символы строк, которые передаются в программу подобно аргументам.

Чтобы определить размер строки, переданной как аргумент, вам необходимо использовать стандартную функцию C strlen, объявленную в заголовке <string.h>. Учтите, что последний указатель в массиве argv имеет значение NULL.

#include <stdio.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    for (char **p = argv; *p; ++p) 
    { 
     printf("%zu\n", strlen(*p)); 
    } 

    return 0; 
} 
Смежные вопросы