Как найти длину argv[] в C

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

int main(int argc, char *argv[]){
    int fir; //badly named loop variable
    char *input[] = calloc( strlen(argv), sizeof(char)); //initializing an array
    for( fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv
        strcat(input, argv[fir]); // appending to input
    }
}

ошибка, которую я получаю, для строки 7. В нем говорится: "передача аргумента 1 'strlen' из несовместимого типа указателя". Я получаю ту же ошибку для . Он также говорит: "учитывая char ** но ожидал const char *" для обеих функций.

Я пытаюсь заполнить новый массив со всеми элементами argv кроме первого. Я пытался!--5--> и это не сработало.

сделать strlen() и strcat() функции не принимают char массивы?

8 ответов


int main(int argc, char *argv[])

argv представляет собой массив указателей на char (т. е. массив строк). Длина этого массива хранится в


не уверен, почему никто не предложил изменить strlen для ссылки на конкретную запись в массиве указателей на char?

 strlen(argv[0])     // also, 1, 2, up to (argc - 1)

и http://www.cdecl.org/ помогает, подтверждающих, что char *argv[] инструкция: declare argv as array of pointer to char


int count = 0; 
while(argv[++count] != NULL);

теперь count будет иметь длину argv


argv - это массив типа char, strlen принимает только строки. Если вы хотите получить длину каждого аргумента в argv (что я и пытался сделать), вы должны перебирать его, получая доступ к таким элементам, как so argv[i][j]. Используя аргумент argv[i][j] != ''. Если вам просто нужно количество аргументов, используйте argc.


argv массив char*. Размер этого массива argc. Вы должны передать элемент этого массива в strlen.


возможно, вы хотели сделать что-то вроде этого:

size_t argv_length(char** argv)
{
    size_t ret = 0;
    while( *(++argv) )
        ret += strlen(*argv);

    return ret;
}

?


argv принимает arryas char*, но вам нужно передать argc в strlen, а не весь массив. Тогда вы не получите никакой ошибки на strcat.

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]){
int fir; //badly named loop variable
char *input[] = calloc( strlen(argc), sizeof(char)); //initializing an array
for( fir = 1; fir< strlen(argv); fir++){ //removing the first element of argv
 strcat(input, argv[fir]); // appending to input
}

//Task = get length of argv
    string text=*argv; //assigning charValue to string variable "text"
    int l=text.length(); //getting the length of the string & assigning to variale "l"

    //this loop just outputs result on the screen
    for (int i=0; i<l; i++) { 
        cout << *(*argv+i) << flush;
    }