2016-08-17 3 views
-8

Могу ли я передать массив символов в fopen? Например:Что я могу передать fopen?

fopen(s, "r"); 

Где s объявлен как массив символов и нулем.

+1

'' 'может быть любым, что вы хотите, если оно представляет последовательность символов с символом NUL. – Sergio

+0

Когда вы передаете переменную функции, вы должны учитывать две вещи - тип переменной и значение переменной. Массив символов хорош для типа. Этого не достаточно. Его значение должно быть установлено соответствующим образом. –

+0

Прочтите руководство ... google ... что угодно. Это не сложно. – StoryTeller

ответ

2

s должен быть указателем на нулевой конец символьного массива. enter image description here

man pages подтверждают это

FILE *fopen(const char *path, const char *mode); 

Вы можете видеть, что он должен быть нулем, так как ни size аргумент не задан.

1

Сигнатура fopen() является:

FILE * fopen (const char * filename, const char * mode); 

Так параметр filename должен быть правильной строкой C. Это все.

+1

Строго говоря, он ожидает указатель, а не строку C, которая является массивом 'char'. – Olaf

0

Точная подпись для fopen, как указано в п C11 стандарта является:

FILE *fopen(const char * restrict filename, const char * restrict mode); 

Оба filename и mode являются лишь указателями на оканчивающийся нуль массивов из char (аки C строк).

Наличие ключевого слова restrict, по-видимому, указывает на то, что строки не должны пересекаться, что не имеет большого смысла, поскольку они оба являются const квалифицированными.

Когда вы передаете массив char в fopen, передается указатель на его первый элемент. Этот этап называется , массив распадается на указатель. То же самое происходит, когда массив используется в выражении, за исключением аргумента sizeof.

Смежные вопросы