如何在C中找到argv 的长度

#include  #include  #include  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行。它说“从不兼容的指针类型传递’strlen’的参数1”。 我得到了strcat函数的相同错误。 它还说“给了一个char **但是期望一个const char * ”这两个函数。

我正在尝试使用argv所有元素填充一个新数组,除了第一个。 我试过argv = &argv[1]但它没有用。

strlen()strcat()函数是否不采用char数组?

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

argv是一个指向char的指针数组(即字符串数组)。 该数组的长度存储在argc参数中。

strlen用于检索必须为null的单个字符串的长度,否则行为未定义。

不知道为什么没有人建议更改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中每个参数的长度(这是我试图做的),你必须遍历它,访问像argv[i][j]这样的元素。 使用参数argv[i][j] != '\0' 。 如果您只想使用argc参数的数量。

argv是一个char*数组。 这个数组的大小是argc 。 您应该将此数组的元素传递给strlen

也许你打算这样做:

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

argv采用char *的arryas但是你需要将argc传递给strlen而不是整个数组。 然后你不会在strcat上得到任何错误。

  #include  #include  #include  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