我正在浏览 C 语言的复制程序,我试图了解以下代码的工作原理。 我对这些函数进行了研究,但由于某种原因无法理解它。 例如 "./main a temp/" 此命令将 a 复制到文件夹 temp/,如果第二个参数以 temp/的"/"结尾,则下面的代码将第二个参数分配为目录。 如果用户输入"./main a b",则程序复制a 并创建具有与 B 相同的文件权限的 B。我知道其他一切。除了下面的代码。有人可以解释下面的代码及其工作原理吗?谢谢
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
}
此函数的目的是返回文件路径。目标文件路径。
您已经确定此程序有两种模式。 1( 其中两个参数都是文件名,以及 2( 其中第二个参数是文件夹。
模式 1(这两个参数都是文件名。
./主要旧.txt新.txt
destinationFilePath = thisFunc("old.txt", "new.txt");
//new.txt
模式 2(第二个参数是文件夹。
./主要旧.txt my_archive/
destinationFilePath = thisFunc("old.txt", "my_archive/");
//my_archive/old.txt
附言在这两种模式下,此代码在新内存中返回文件名,应对其进行管理;它不依赖于任一参数的分配内存。
P.P.S 就像@Jonathan指出的那样,内存和空终止的代码质量不是很好。