char ** argv [] segfaults при попытке получить ввод из командной строки

Я пытаюсь сделать самые простые вещи и бью кирпичную стену. Я пытаюсь прочитать имя файла из командной строки для последующего использования в моей программе, но я даже не могу извлечь имя из 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;
}

Я тестирую его на входах, которые, конечно, предоставляют аргумент, поскольку нет проверки ошибок. Вот что я получаю, когда запускаю программу:

./a.out testfilename

*

argc = 2

Filename: 0x7fff56e41d30

Теперь я понимаю, что argv [1] является указателем на массив символов, поэтому этот вывод имеет смысл. Однако, если я сделаю следующее изменение,

cout << "Filename: " << argv[1] << "\n";

в

cout << "Filename: " << *argv[1] << "\n";

при попытке разыменования argv [1], чтобы вытащить фактическую строку, я получаю ошибку сегментации ..

1

Решение

int main(int argc, char *argv[]){

или же

int main(int argc, char **argv){

но нет

int main(int argc, char **argv[]){
5

Другие решения

Которые должны быть:

int main(int argc, char *argv[])
^ only one * here
0