您好我试图在C中构建一个linux cp命令版本,可以处理以下测试用例
我已经给出了Copyfile函数的代码,我尝试做的就是创建我的main函数来调用Copyfile并验证测试用例是否正确处理。这是CopyFile函数和main函数。我在正确的轨道上吗?我没能测试,因为我在编译时遇到错误(错误:Copyfile的confilcting类型),我似乎无法弄清楚什么是错的。
int copyFiles(int argC, char* argV[]){
int srcFd;
int dstFd;
int charCnt;
int buffersize = strtol(argV[3], NULL, 10);
char buf[buffersize];
/*Check args*/
if( argC!=4 ){
fprintf( stderr, "usage: %s source destination\n", argV[0]);
exit(1);
}
/*Open the files*/
srcFd= open(argV[1],O_RDONLY);
if( srcFd==-1 ){
errExit("Cannot open ", argV[1]);
}
dstFd= creat(argV[2],COPYMODE);
if( dstFd==-1 ){
errExit( "Cannot create ", argV[2]);
}
/*Copy the data*/
while( (charCnt= read(srcFd,buf,buffersize)) > 0 ){
if( write(dstFd,buf,charCnt ) != charCnt ){
errExit("Write error to ", argV[2]);
}
}
if( charCnt==-1 ){
errExit("Read error from ", argV[1]);
}
/*Close files*/
if ( close(srcFd) == -1 || close(dstFd) == -1 ){
errExit("Error closing files","");
}
}
int copyFiles(char *srcFd,char *dstFd);
int main(int argC, char* argV[])
{
char *srcFd = argV[1];
char *dstFd = argV[2];
if( srcFd[0] != '/' && dstFd[0] != '/' )//cpy f1 f2
{
copyFiles(srcFd, dstFd);
}
else if( srcFd[0] != '/' && dstFd[0] == '/' )//cpy f1 /d
{
int i;
for(i=1; i<=strlen(dstFd); i++)
{
dstFd[(i-1)] = dstFd[i];
}
strcat(dstFd, "/");
strcat(dstFd, srcFd);
copyFiles(srcFd, dstFd);
}
else
{
fprintf(stderr, "usage: cp1 source destination\n");
exit(1);
}
}
答案 0 :(得分:1)
您已使用 int和char * 将参数定义为&#xA; int copyFiles(int argC,char * argV [])
但在主程序中声明为 char *和char * &#xA; int copyFiles(char * srcFd,char * dstFd); 代码>
哪些 C 不接受并因此发生冲突。这就是它显示错误的原因。
&#xA;