char**argv []在尝试从命令行获取输入时出现段错误

Fab*_*tel 1 c++ input argv argc

我正在尝试做最基本的事情,并且正在打砖墙.我试图从命令行读取文件名以便稍后在我的程序中使用,但我甚至无法从argv []中提取名称.这是代码:

#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char **argv[]){
    cout << "argc = " << argc << "\n\n";
    cout << "Filename: " << argv[1] << "\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在测试它当然提供参数的输入,因为没有错误检查.这是我运行程序时得到的结果:

./a.out testfilename
Run Code Online (Sandbox Code Playgroud)

*

argc = 2

Filename: 0x7fff56e41d30
Run Code Online (Sandbox Code Playgroud)

现在我明白了argv [1]是一个指向字符数组的指针,所以这个输出是有意义的.但是,如果我进行以下更改,

cout << "Filename: " << argv[1] << "\n";
Run Code Online (Sandbox Code Playgroud)

cout << "Filename: " << *argv[1] << "\n";
Run Code Online (Sandbox Code Playgroud)

为了取消引用argv [1]来拉出实际的字符串,我得到了一个分段错误..

joh*_*ohn 5

int main(int argc, char *argv[]){
Run Code Online (Sandbox Code Playgroud)

要么

int main(int argc, char **argv){
Run Code Online (Sandbox Code Playgroud)

但不是

int main(int argc, char **argv[]){
Run Code Online (Sandbox Code Playgroud)