2016-06-14 16 views
3

私がしようとしているのは、argv[1]という文字列をコピーして別の配列にコピーすることですが、この新しい配列をconstにします。宣言時にchar配列を別のconst char配列にコピー

配列をconstとして宣言し、同じ行にargv[1]の内容で初期化する方法はありますか?

問題は私がconstと宣言できず、次の行にstrcpyまたはそのような関数を使って文字列をコピーすることができないという問題です。それは無効です。

どのような行動をとるのが最適ですか?あなたは(それがconstの、すべてである)、それを変更したくない、あなたもどこかでそれをコピーする必要はありません考慮

+3

const charへのポインタはどうですか?それを 'argv [1]'で指していますか?後でargv [1]を変更する予定がない限り... – Dmitri

+0

これは実際には素晴らしい考えです。それが最善の解決策かもしれません。 – LTClipp

答えて

7

だからあなたmyPointerは、これらのコンテンツを持つchar型の配列を指すようになります:実際にその引数を活用

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    const char *argument = argv[1]; 
    printf("%s\n", argument); 

    return 0; 
} 

を[0] *議論と実質的に同じです。 しかし、注意してください!

int main(int argc, char *argv[]) 
{ 
    const char *argument = argv[1]; 
    printf("%s\n", argument); 

    argument[2] = 'z'; //ERROR 
    printf("%s\n", argument); 

    return 0; 
} 

これにより、上記のエラーが予想どおりに発生します。しかし...

int main(int argc, char *argv[]) 
{ 
    const char *argument = argv[1]; 
    printf("%s\n", argument); 

    argv[1][2] = 'z';  //same memory location but no errors 
    printf("%s\n", argv[1]); 

    printf("%s\n", argument); 

    return 0; 
} 

エラーは発生しません....最後のprintfでは、文字列が編集されていることがわかります。

+0

これはすべて完全に意味があり、それは正しい解決策です。あなたの答えをありがとう、私はいつもこの場所がどのように役立つかに驚いています。 – LTClipp

3

:このように正しい引数の個数と引数として

(Basicコード欠け健全性チェックな長さ)

const char *myPointer = NULL; 
myPointer = argv[1]; 

今myPointerは、argv[1]にプログラムが発足したことを、あなたの最初の引数を指しています。あなたがmyfolder/myexe.exe myArgのようにあなたのプログラムを起動する場合は、このような何かができ{'m','y','A','r','g','\0'}

関連する問題