问题描述
你好,我是 c 新手,我有关于 tcp 程序的作业,这个项目中有一个问题我不能通过任何人都可以帮助我
StartsWithDEL() 这个函数捕获 DEL user.txt 就像 return true trim() 喜欢trim,只给出文件名user.txt
但是当我写客户端行时 DEL user.txt 不会删除
if (StartsWithDEL(line,"DEL") == 1)
{
char *deltoken = strtok(line,"DEL");
char *itemDeleting = trim(deltoken);
//in this section I cach file name but cant delete it
remove(itemDeleting);
send(client,"\n",strlen("\n"),0);
}
解决方法
您对 strtok()
的调用不正确。第二个参数是字符串或允许的标记分隔符,在您的情况下为 .如果您使用 "DEL"
调用它,它将用 D
覆盖 \0
,而 deltoken
将指向该空字符串。
如果您选择使用 strtok()
,则:
char* token = strtok( line," " ) ;
if( strcmp( token,"DEL" ) == 0 )
{
char* itemDeleting = strtok( NULL," " ) ;
remove(itemDeleting);
send(client,"\n",strlen("\n"),0);
}
然而,如果避免 strtok()
的复杂性更简单,并且它通过插入 nul 来修改 line
的事实使其在许多情况下不可取。如果文件名可能包含空格,上面的代码也将不起作用。
有许多替代解决方案,例如:
size_t delimiter_index = strcspn( line," " ) ;
if( strncmp( line,"DEL",delimiter_index ) == 0 )
{
char* itemDeleting = &line[delimiter_index] ;
while( *itemDeleting == 0 && *itemDeleting != '\0' ) itemDeleting++ ;
remove(itemDeleting);
send(client,0);
}
因为我不知道StartsWithDEL()
或trim()
是什么所以我避开了它们。