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引数に格納されます。

strlennull で終了する必要がある単一の文字列の長さを取得するために使用することを意図しています。それ以外の場合、動作は未定義です。

于 2013-09-06T03:51:01.217 に答える
11

char へのポインターの配列内の特定のエントリを参照するように strlen を変更することを誰も提案していないのはなぜですか?

 strlen(argv[0])     // also, 1, 2, up to (argc - 1)

また、http:char *argv[] //www.cdecl.org/ は、ステートメントが次のとおりであることを確認するのに役立ちます。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の配列です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 に答える