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
}
質問する
543 次
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 に答える