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";

to

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

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


person Fab Castel    schedule 01.05.2013    source источник
comment
возможный дубликат Каково правильное объявление main?   -  person    schedule 01.05.2013


Ответы (2)


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

or

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

но нет

int main(int argc, char **argv[]){
person john    schedule 01.05.2013
comment
Спасибо, что просветили, сам бы не заметил. Теперь работает нормально. - person Fab Castel; 01.05.2013

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

int main(int argc, char *argv[])
                        ^ only one * here
person Bill    schedule 01.05.2013