0
int main(int argc, char* argv[]){

    // checked for right number of arguments

    // reading pack name
    char* filename[MAX_STR_LEN];
    strcpy(*filename, argv[1]);  // seg fault here
}
4

4 に答える 4

2
char* filename[MAX_STR_LEN];

これはポインターの配列を宣言し、それらを何かを指すように初期化しません。それらを逆参照すると、未定義の動作が発生します。運が良ければ、セグメンテーション違反です。

おそらく、文字列を含む文字の配列を宣言するつもりでした:

char filename[MAX_STR_LEN];
strcpy(filename, argv[1]);

あとは、配列が十分な大きさであることを確認する必要があります。または、低レベルの C アーティファクトをいじるのをやめて、std::string代わりに使用します。

于 2013-11-06T17:36:29.823 に答える
0
char filename[MAX_STR_LEN] // without the * 
strcpy(filename, argv[1]); // without the *

より良い(stackoverflowを避けるために!(笑)):

strncpy( filename, argv[1], sizeof(filename)-1 );
filename[ sizeof(filename)-1 ] = 0; 
于 2013-11-06T17:35:45.387 に答える
0

1) filename は *char の配列です。それがあなたがやりたいことかどうかわかりません。あなたはおそらく持っていたい

char filename[FOO];

2) strcpy は (char *, const char *) を期待していますが、これを渡していますが、ここには割り当てられたスペースがありません。(1) を参照してください。

于 2013-11-06T17:36:05.700 に答える