Я пытаюсь сделать самые простые вещи и бью кирпичную стену. Я пытаюсь прочитать имя файла из командной строки для последующего использования в моей программе, но я даже не могу извлечь имя из 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], чтобы вытащить фактическую строку, я получаю ошибку сегментации ..
int main(int argc, char *argv[]){
или же
int main(int argc, char **argv){
но нет
int main(int argc, char **argv[]){
Которые должны быть:
int main(int argc, char *argv[])
^ only one * here