Я работал с argv для хранения символов из командной строки. И я только что заметил, что если я введу #, я получу ноль вместо символа #. Почему это происходит?

#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("%c",argv[1][0]);
}

Приведенный выше код отлично работает с любым символом, кроме #, который возвращает ошибку сегментации (дамп ядра).

3
JulesR 8 Дек 2017 в 21:39

1 ответ

Лучший ответ

Символ # обозначает начало комментария к оболочке, поэтому он никогда не попадает в вашу программу. В результате argv имеет только один элемент, то есть argv[0], поэтому доступ к argv[1] считывает конец массива. Это вызывает неопределенное поведение, которое в этом случае проявляется в сбое.

Чтобы оболочка могла передать этот специальный символ вашей программе, вам нужно указать его в кавычки:

./myprogram "#"
8
dbush 8 Дек 2017 в 21:47