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
}
答案 0 :(得分:2)
char* filename[MAX_STR_LEN];
它声明了一个指针数组,并没有初始化它们指向任何东西。取消引用它们会产生不确定的行为;如果你很幸运,那就是分段错误。
你可能想要声明一个包含字符串的字符数组:
char filename[MAX_STR_LEN];
strcpy(filename, argv[1]);
现在你只需要确保阵列足够大;或者停止使用低级别的C工件,并使用std::string
代替。
答案 1 :(得分:0)
char filename[MAX_STR_LEN] // without the *
strcpy(filename, argv[1]); // without the *
更好(避免stackoverflow!(lol)):
strncpy( filename, argv[1], sizeof(filename)-1 );
filename[ sizeof(filename)-1 ] = 0;
答案 2 :(得分:0)
1)filename是* char的数组。我不确定你想要做什么。你可能想拥有
char filename[FOO];
2)strcpy需要一个(char *,const char *),你传递它,但是这里没有分配的空间,请参阅(1)
答案 3 :(得分:0)
应该是
char filename[MAX_STR_LEN];
.
.
strcpy(filename, argv[1]);
或更好
snprintf(filename, sizeof(filename), "%s", argv[1]);