为什么文件在 C 语言中没有删除

问题描述

你好,我是 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);
    
             }

enter image description here

解决方法

您对 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()是什么所以我避开了它们。