使用带有指向cstring的指针的strcpy()时出现分段错误

时间:2013-11-06 17:33:05

标签: c++ pointers segmentation-fault strcpy c-strings

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 个答案:

答案 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]);