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) 文件名是 *char 的数组。我不确定这就是你想要做的。你可能想拥有

char filename[FOO];

2) strcpy 需要一个 (char *, const char *),您正在传递它,但这里没有为您分配空间,请参阅 (1)

于 2013-11-06T17:36:05.700 回答
0

它应该是

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

或者更好

snprintf(filename, sizeof(filename), "%s", argv[1]);
于 2013-11-06T17:37:57.193 回答