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