c - 如何从路径中删除最后一个字符串标记
问题描述
我有一个像"\\\\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);
解决方案
最好使用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 中的几乎所有路径情况下——这让事情看起来更容易一些)
看看事情,如果你有问题,请告诉我。
推荐阅读
- java - 使用正则表达式替换垃圾字符撇号
- javascript - jQuery输入多个基于另一个输入值
- razor - ASP.NET Core - 像 MVC 一样的脚手架标识
- c++ - 使用 curlpp 设置 SSL 记录的最大片段长度协商
- php - 无法将现有表用于 laravel Eloquent
- java - 使用 JAR 文件中的静态变量
- asp.net - Automapper 和 System.ValueTuple 依赖/版本控制问题
- powershell - 如何使用修改后的日期处理 Powershell 或 Batch 提取文件列表
- python - 向数据框添加多列并跳过空值
- c# - 我可以在任务被取消之前处理 CancellationTokenSource 吗?