C语言如何提取wchar_t*类型URL中最后一个斜杠后的内容
C语言提取宽字符URL最后一段路径的实现方案
核心思路
不需要完整拆分整个URL,直接调用宽字符库函数查找最后一个斜杠L'/'的位置即可,实现简单且性能更高。
实现代码
方案1:直接返回原字符串内的指针(无需独立副本场景)
返回的指针指向原URL的内存地址,优势是无需额外内存分配,适合不需要长期保存结果、不需要修改结果的场景。
#include <wchar.h> wchar_t* get_last_url_segment(wchar_t* url) { // 查找最后一个斜杠的位置 wchar_t* last_slash = wcsrchr(url, L'/'); // 无斜杠时直接返回整个字符串,否则返回斜杠下一个位置的指针 return last_slash == NULL ? url : last_slash + 1; }
方案2:返回独立的新wchar_t*副本(符合你的需求)
会新申请堆内存存储结果,和原URL完全独立,修改或释放原URL不会影响结果,用完需要手动free()释放避免内存泄漏。
#include <wchar.h> #include <stdlib.h> wchar_t* get_last_url_segment_copy(const wchar_t* url) { const wchar_t* last_slash = wcsrchr(url, L'/'); const wchar_t* seg_start = last_slash == NULL ? url : last_slash + 1; // 计算待复制的字符长度,+1是预留宽字符结束符位置 size_t seg_len = wcslen(seg_start) + 1; wchar_t* res = (wchar_t*)malloc(seg_len * sizeof(wchar_t)); if (res == NULL) { // 内存分配失败可根据业务逻辑调整错误处理 return NULL; } wcscpy(res, seg_start); return res; }
使用示例
#include <wchar.h> #include <stdio.h> #include <stdlib.h> int main() { wchar_t url[] = L"https://example.com/test/...../abcde12345"; wchar_t* last_seg = get_last_url_segment_copy(url); if (last_seg != NULL) { // 输出结果为abcde12345 wprintf(L"%ls\n", last_seg); // 用完释放内存 free(last_seg); } return 0; }
边界情况补充
如果你的URL可能以斜杠结尾(如https://example.com/test/),可以先跳过末尾的斜杠再执行查找:
wchar_t* get_last_url_segment_trim_trailing(wchar_t* url) { size_t len = wcslen(url); // 跳过末尾所有连续斜杠 while (len > 0 && url[len - 1] == L'/') { len--; } if (len == 0) { return L""; } // 临时截断末尾斜杠,不修改原字符串可删除这行,直接从url+len位置往前查找即可 url[len] = L'\0'; wchar_t* last_slash = wcsrchr(url, L'/'); return last_slash == NULL ? url : last_slash + 1; }
内容的提问来源于stack exchange,提问作者alon
相关产品推荐
相关产品推荐

