0

では、なぜこれができないのだろうと考えていました。

int main(int argc, char **argv){

    FILE *src;
    char filePath[261];
    filePath = argv[1];

最後の行は、コンパイラ エラーがある場所です。char[] と char* の違いは何ですか? filePath を argv[1] に設定できるようにするには、このコードをどのように修正すればよいでしょうか。前もって感謝します。

4

4 に答える 4

5

使用する

strcpy(filePath, argv[1]);

そして幸せに生きてください。argv[1] が NULL であることを確認し、argc が > 1 であるかどうかを確認することを忘れないでください。

変数filePathはスタックに割り当てられる固定サイズの配列であり、argv[i] はヒープ内のメモリへのポインターです。filePath はポインターではなく、データ自体であるため、filePath への割り当ては実行できません。

于 2012-10-01T22:52:10.100 に答える
2

filePathは配列であり、C では配列のアドレスを変更することは許可されていないためです。文字列ファミリを使用して文字列をコピーできます。

于 2012-10-01T22:52:12.917 に答える
1

Q: char[] と char* の違いは何ですか?

A: 多くの場合、これらは同じ意味で使用できます。

しかし、ここでは、「配列名を左辺値として使用しようとしています」:)

ここに良い説明があります:

「合法なものとそうでないもの」の簡単な要約は次のとおりです。

于 2012-10-01T22:58:37.867 に答える
1

次のものが必要です。

FILE *src;
char *filePath;
filePath = argv[1];

261 バイトの配列ではなく、argv を指すfilePath必要があるためです。必要に応じて、引数 i を配列にコピーできます。

FILE *src;
char filePath[261];
strcpy(filePath, argv[1]);

または、利用可能なバイト数よりも多くのバイトをコピーするリスクを回避するため (災害につながる可能性があります):

FILE *src;
char filePath[261];
strncpy(filePath, argv[1], sizeof(filePath));

または再び

#define MAX_FILESIZE    261

FILE *src;
char filePath[MAX_FILESIZE];
strncpy(filePath, argv[1], MAX_FILESIZE);
于 2012-10-01T22:52:29.450 に答える