Je regarde à travers un programme de copie en c, j'essaie de comprendre comment fonctionne le code ci-dessous. J'ai des recherches sur les fonctions, mais pour une raison que je ne peux pas comprendre. par exemple. "./main a temp /" cette commande copie a dans le dossier temp, le code ci-dessous assigne le second argument en tant que répertoire s'il se termine par un "/" qui est temp /. si l'utilisateur entre "./main a b" alors le programme copie a et crée b avec les mêmes permissions que b. Je sais tout le reste. Sauf le code ci-dessous. Quelqu'un peut-il s'il vous plaît expliquer le code ci-dessous et comment cela fonctionne. Mercicopier le fichier en utilisant le 2ème argument comme répertoire
if(S_ISDIR(ost.st_mode)){ //if output filename is a directory
//concatenate directory name and input name
int ilen = strlen(iname);
int olen = strlen(oname);
int len = ilen + olen + 2;
char *copy_name = (char*) malloc(len); //dynamically allocate a memory buffer
if(copy_name == NULL)
oops("Cannot malloc memory", ":");
memcpy(copy_name, oname, olen); //copy directory name
copy_name[olen] = '/'; //separate directory and file name with a slash
memcpy(©_name[olen+1], iname, ilen); //copy output file name
return copy_name;
}else{
return strdup(oname); //if output filename is not a directory, just copy it
}
Le code ne garantit pas que la chaîne créée est terminée par un caractère nul; il devrait copier 'ilen + 1' octets avec le second' memcpy() 'pour s'assurer que l'octet nul à la fin de' iname' est copié. –
1) le code * ne vérifie pas si le chemin se termine par a/et 2) que voulez-vous savoir à ce sujet? – immibis
Je veux savoir comment le code fonctionne, vous avez raison, il ne vérifie pas mais si la commande est ./main un temp /, il prend le second argument en tant que répertoire car il comprend une barre oblique –