2013-10-09 3 views
0

Je l'ai lu et je ne sais que le tampon est la longueur non précisée des données dans la RAMPourquoi utiliser le tampon avant de l'envoyer dans les fonctions

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

Comment ça marche? Pourquoi devrions-nous utiliser un tampon pour un argument dans une fonction? Et pourquoi pas

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

travail?

+0

Pourquoi seconde ne fonctionne pas? – P0W

+0

Il semble que la longueur du tampon * est * spécifiée, il s'agit de '100' caractères. – Simon

Répondre

1

En fait, ce dernier moyen fonctionnera également. Cependant, dans de nombreux cas, vous devez former le nom de fichier à l'exécution, ce qui signifie que vous devez utiliser snprintf() (vous êtes et non en utilisant sprintf(), êtes-vous?) Pour créer le nom de fichier. Par exemple, cela pourrait ressembler à ceci:

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"); 

Dans votre (très simple cas), vous pouvez le faire encore plus simple:

fp = fopen("abc.txt", "r") 
Questions connexes