首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理路径长度的问题

问处理路径长度的问题
EN

Stack Overflow用户
提问于 2011-08-18 19:45:26
回答 4查看 1.3K关注 0票数 3

我正在创建一个库,它将用于linux和windows上的文件操作。所以我需要处理路径,主要的要求是我的函数将接收UTF8格式的字符串。但这也带来了一些问题,其中之一就是我在windows上使用MAX_PATH,在linux上使用PATH_MAX来表示静态路径变量。在ASCII字符的情况下没有问题,但是当path包含unicode字符时,如果unicode char需要每个字符2个字节,则路径长度将缩短两倍,如果unicode char需要每个字符3个字节,则路径长度将缩短3倍,以此类推。那么这个问题有没有很好的解决方案呢?

提前感谢!

附注:对不起,我的英语不好。

EN

回答 4

Stack Overflow用户

发布于 2011-08-18 20:08:13

至少在Linux上,您的担忧似乎是错误的。Linux (和一般的POSIX )将路径视为以"\0“结尾的不透明的blob字节。它并不关心如何将这些字节转换为字符。也就是说,PATH_MAX以字节而非字符为单位指定路径名的最大长度。

因此,如果路径名包含>= 0多字节UTF-8字符,则意味着以字符为单位的最大路径长度为<= PATH_MAX。

票数 4
EN

Stack Overflow用户

发布于 2011-08-18 20:02:25

UTF-8是多字节编码格式,每个字符从1字节到4字节不等。由于您希望静态地定义最大路径值,因此可能需要将最大路径定义为n*4 (其中n是您要定义的以ASCII码表示的路径长度),以容纳UTF8编码字符。

票数 1
EN

Stack Overflow用户

发布于 2011-08-18 20:21:01

这完全取决于你需要什么。

如果你想要MAX_PATH的字节数,你只需将一个缓冲区定义为char name[MAX_PATH]。如果您想要Unicode字符的数量,可以将缓冲区定义为char name[MAX_PATH * 4],因为UTF-8将每个字符编码为1到4个八位字节的可变数量。

简而言之,正如janneb指出的那样,MAX_PATH (or PATH_MAX)指定的底层字节数是,而不是字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7106911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档