#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
数组?
答案 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)
argv
是char*
的数组。此数组的大小为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;
}