1

このトピックに関して以前に質問がありましたが、このエラーを思いついたので、何も問題がないようです。文字列へのargsの割り当てにあるのではないかと思います。

編集:

void replace(char* string_a, char* string_b, char* string_f)
{
}

int main(int argc, char *argv[])
{
     if(argc < 4)
     { 
         printf("Not enough arguments\n");
         return 0;
     }

     replace(argv[1],argv[2],argv[3]);
}

main関数がreplace関数の後になければならない、またはコンパイラが文句を言うのは奇妙です。理由を調べなければなりません。

4

2 に答える 2

3

これは有効ではありません C:

 char string_a[] = argv[1];

コンパイル時に、コンパイラは を格納するために必要なメモリの量を把握できませんargv[1]。したがって、これは不可能です。

ただし、argv[1]はポインターであり、適切な型の変数をポインターに割り当てることができます。したがって、次のことができます。

const char *string_a = argv[1];

ただし、argv[1]string_aは現在、まったく同じメモリに支えられています。(そして、このメモリはおそらく読み取り専用です)。

于 2012-09-25T16:52:59.310 に答える
0

次のようにします。

int main(int argc, char *argv[]) {   
    if(argc < 4) {
        printf("Not enough arguments\n");
        return 0;
    }

    string s=argv[1];
    string s1=argv[2];
    string s2=argv[3]; 
    replace(s,s1,s2);    
} 

void replace(s,s1,s2) { 
    //statements
}
于 2012-09-25T17:27:48.903 に答える