2013-10-09 45 views
0

之前,我讀過這個,我只知道緩衝區的數據未指定長度在RAM爲什麼要使用緩衝存儲器發送到它的功能

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") 
相關問題