19
#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吗?

4

8 回答 8

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

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

strlen旨在用于检索必须以空值结尾的单个字符串的长度,否则行为未定义。

于 2013-09-06T03:51:01.217 回答
11

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

于 2013-09-06T05:51:43.740 回答
3
int count = 0; 
while(argv[++count] != NULL);

现在, count 将具有 argv 的长度

于 2014-04-18T20:35:31.777 回答
1

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

于 2013-09-07T21:54:23.643 回答
1

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

于 2013-09-06T03:50:53.427 回答
0

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

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

    return ret;
}

?

于 2013-09-06T04:04:58.023 回答
-1

argv 需要一个 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
}
于 2013-09-06T04:06:22.597 回答
-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;
    }
于 2018-08-16T10:19:09.200 回答