如何在C中找到argv []的长度

时间:2013-09-06 03:47:21

标签: c argv 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(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数组?

8 个答案:

答案 0 :(得分:28)

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

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

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

答案 1 :(得分:4)

不确定为什么没有人建议更改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

答案 2 :(得分:1)

argv是一个char数组,strlen只接受字符串。如果你想得到argv中每个参数的长度(这是我试图做的),你必须遍历它,访问像argv[i][j]这样的元素。使用参数argv[i][j] != '\0'。如果您只想使用argc的参数数量。

答案 3 :(得分:1)

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

现在,count将具有argv的长度

答案 4 :(得分:0)

argvchar*的数组。此数组的大小为argc。您应该将此数组的元素传递给strlen

答案 5 :(得分:0)

也许你打算做这样的事情:

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

    return ret;
}

答案 6 :(得分:-1)

argv采用char *的arryas但你需要将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
}

答案 7 :(得分:-1)

//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;
    }