2013-10-09 9 views
0

Я прочитал это, и я только знаю, что буфер не определен объем данных в оперативной памятиПочему мы должны использовать буфер перед отправкой его в функцию

char buf[100]; 
    snprintf(buf, sizeof(buf), "%s.txt", "abc"); 
    FILE *f = fopen(buf, "r"); 

Как это работает? Почему мы должны использовать буфер для аргумента в функции? И почему не

char buf[100] = "abc.txt"; 
    FILE *f = fopen(buf, "r"); 

работа?

+0

Почему вторым один не работает? – P0W

+0

Похоже, что длина буфера * указана *, это символы '100'. – Simon

ответ

1

Собственно, последний способ будет работать. Однако во многих случаях вам нужно сформировать имя файла во время выполнения, а это значит, что вы должны использовать snprintf() (вы не с использованием sprintf(), не так ли?), Чтобы создать имя файла. Например, это может выглядеть следующим образом:

int user_id = get_user_id(); 
char fname[PATH_MAX]; 
/* for each user data is in a file <user_id>.txt */ 
snprintf(fname, sizeof(fname), "%d.txt", user_id); 
fp = fopen(fname, "r"); 

В вашем (очень простом случае), вы можете сделать это еще проще:

fp = fopen("abc.txt", "r") 
Смежные вопросы