では、なぜこれができないのだろうと考えていました。
int main(int argc, char **argv){
FILE *src;
char filePath[261];
filePath = argv[1];
最後の行は、コンパイラ エラーがある場所です。char[] と char* の違いは何ですか? filePath を argv[1] に設定できるようにするには、このコードをどのように修正すればよいでしょうか。前もって感謝します。
使用する
strcpy(filePath, argv[1]);
そして幸せに生きてください。argv[1] が NULL であることを確認し、argc が > 1 であるかどうかを確認することを忘れないでください。
変数filePath
はスタックに割り当てられる固定サイズの配列であり、argv[i] はヒープ内のメモリへのポインターです。filePath はポインターではなく、データ自体であるため、filePath への割り当ては実行できません。
filePath
は配列であり、C では配列のアドレスを変更することは許可されていないためです。文字列ファミリを使用して文字列をコピーできます。
Q: char[] と char* の違いは何ですか?
A: 多くの場合、これらは同じ意味で使用できます。
しかし、ここでは、「配列名を左辺値として使用しようとしています」:)
ここに良い説明があります:
「合法なものとそうでないもの」の簡単な要約は次のとおりです。
次のものが必要です。
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);