首页 > 解决方案 > 如何从路径中删除最后一个字符串标记

问题描述

我有一个像"\\\\PC1\\Users\\Administrator\\Last\\". 我想删除字符串的最后一部分,我的意思是 Last。我使用了以下代码,但它不起作用。

 char str1[] = "\\\\PC1\\C$\\Users\\Administrator\\Last\\";

 char* temp;
 temp = strchr(str1, '\\');   //Get the pointer to char token
 *temp = '\0';
 printf("%s\n", str1);

标签: c

解决方案


最好使用strrchr()获取指向最后一次出现'\\'in的指针,str1而不是获取指向第一次出现的指针strchr(). 所需要做的就是在获取指向最后一个字符的指针时循环'\\'并检查下一个字符是否是nul 终止'\\'字符,每次都用nul终止字符覆盖。退出时,检查您是否退出,因为找到'\\'以下字符不是nul 字符的位置,并再次为您的最终解决方案nul-terminate :

#include <stdio.h>
#include <string.h>

int main (void) {

    char str1[] = "\\\\PC1\\C$\\Users\\Administrator\\Last\\";
    char *temp = strrchr (str1, '\\');      /* find last \\ */

    while (temp && !temp[1]) {              /* valid ptr & next is nul-character */
        *temp = 0;                          /* nul-terminate at current */
        temp = strrchr (str1, '\\');        /* get next last \\ */
    }
    if (temp)                               /* if not NULL */
        *temp = 0;                          /* nul-terminate at current */

    printf ("%s\n", str1);                  /* output results */
}

如果要保留后面的最后一个路径分隔符"...Administrator\",则在 处进行最终终止temp[1],例如

    if (temp)                               /* if not NULL */
        temp[1] = 0;                        /* nul-terminate at next */

无论字符串是否以'\\'. 例如,它同样适用于:

char str1[] = "\\\\PC1\\C$\\Users\\Administrator\\Last";

示例使用/输出

"...Administrator"通过在以下位置进行最终终止来删除路径分隔符*temp

$ ./bin/trimlast
\\PC1\C$\Users\Administrator

或者如果保留终止于 的最终分隔符temp[1]

$ ./bin/trimlast
\\PC1\C$\Users\Administrator\

注意: windows 接受'/'而不是'\\'在 C 中的几乎所有路径情况下——这让事情看起来更容易一些)

看看事情,如果你有问题,请告诉我。


推荐阅读