我正在通过复制程序在c,我想了解下面的代码如何工作。我有关于功能的研究,但由于某种原因,我无法理解它。例如“./main a temp /”这个命令复制一个文件夹temp,下面的代码将第二个参数赋值为一个目录,如果以“/”结尾为temp /。如果用户输入“./main a b”,则程序将复制一个并创建与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
}
该代码不确保创建的字符串是空终止的;它应该将'ilen + 1'字节与第二个'memcpy()'复制,以确保'iname'结尾处的空字节被复制。 –
1)代码*不会*检查路径是以/结束的,2)您想知道关于它的具体内容? – immibis
我想知道代码是如何工作的,你是对的,它不检查,但如果命令是./main temp /,它假定第二个参数为目录,因为它包含一个斜线 –