私はcでコピープログラムを見ていますが、私は以下のコードの仕組みを理解しようとしています。私は機能についての研究を持っていますが、何らかの理由でそれについて私の頭を上げることはできません。例えば"./main a temp /"このコマンドはaをtempにコピーします。下のコードは、temp /である "/"で終わる場合、2番目の引数をディレクトリとして割り当てます。ユーザーが "./main a b"と入力すると、プログラムはaをコピーし、bと同じファイル権限でbを作成します。私は他のすべてを知っている。以下のコードを除きます。誰かが下のコードとその動作を説明してくれますか? ありがとう2番目の引数をディレクトリとして使用するコピーファイル
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
}
コードでは、作成された文字列がnullで終了することを保証しません。 'ilen + 1'バイトを' memcpy() 'と一緒にコピーして、' iname'の終わりのヌルバイトがコピーされるようにする必要があります。 –
1)コードはパスが/で終わるかどうかチェックしません。2)正確に知りたいことは何ですか? – immibis
コードがどのように動作しているか知りたいのですが、それはチェックされませんが、コマンドが./main a temp /の場合、スラッシュが含まれているため、ディレクトリとして2番目の引数が仮定されます。 –