Строка из аргумента командной строки в C

int main(int argc, char* argv[]) {
    char file1 = argv[1];
    char file2 = argv[2];
}

Я получаю сообщение об ошибке - инициализация делает целое число из указателя без приведения. file1 и file2 - это имена файлов. Как я могу к этому подойти?

# pointers char variable-assignment incompatibletypeerror
Источник
  • 2
    char -> char *
  • 2
    Переменная argv - это массив указателей на char . Каждый элемент имеет тип char * .
  • 5
    О, и никогда не используйте указатели в argv если вы argc , чтобы убедиться, что индексы действительны.
  • 0
    Отвечает ли это на ваш вопрос? Прочитать файл input.txt, а также файл output.bmp из терминала (программирование на C)
  • 0
    Обратите внимание, что Q / AI, предложенный как дубликат, использует спецификатор формата для «строк», то есть указатель на char в мире C. Вот как, я думаю, он отвечает на вопрос о том, почему использование char не работает. (Да, это один из моих ответов. Я с радостью подтвердю и "прокомментирую" любой ДРУГОЙ предложенный товар или лучшую копию.)
  • 1
    Из правила @ Someprogrammerdude есть одно единственное исключение: argv -array тоже завершается нулем (гарантируется стандартом), поэтому вместо проверки argc вы также можете передать его, например, for(char**p = argv; *p; ++p) { /* use *p */ } . Однако это редко используется.
Codelisting
за 2 против
Лучший ответ

argv[1]а такжеargv[2] иметь типchar * которые указывают на строки, а объектыfile1 а такжеfile2 имеют тип char и не являются указателями. Итак, компилятор выдает ошибку, что вы пытаетесь назначить указатели (argv[1] а такжеargv[2] ) к символам (file1 а такжеfile2 ) что не имеет смысла ..

char file1 = argv[1];
char file2 = argv[2];

Вам нужно написать

char *file1 = argv[1];
char *file2 = argv[2];

В этом случае указателиfile1 а такжеfile2 будет указывать на введенные пользователем строки, обозначающие имена файлов.

Codelisting
Популярные категории
На заметку программисту