将 strcpy() 与指向 cstring 的指针一起使用时出现分段错误

Segmentation fault when using strcpy() with pointer to cstring

本文关键字:一起 错误 分段 指针 strcpy cstring      更新时间:2023-10-16
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
}
char* filename[MAX_STR_LEN];

它声明了一个指针数组,并且不会初始化它们以指向任何内容。取消引用它们会产生未定义的行为;如果幸运的话,这是一个分段错误。

您可能打算声明一个字符数组来包含字符串:

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

现在你只需要确保数组足够大;或者停止使用低级C工件,改用std::string

char filename[MAX_STR_LEN] // without the * 
strcpy(filename, argv[1]); // without the *

更好(避免堆栈溢出!(哈哈):

strncpy( filename, argv[1], sizeof(filename)-1 );
filename[ sizeof(filename)-1 ] = 0; 

1) 文件名是一个 *char 数组。 我不确定这就是你想做的。 你可能想要拥有

char filename[FOO];

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

它应该是

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

或者更好

snprintf(filename, sizeof(filename), "%s", argv[1]);
相关文章: