【发布时间】:2011-01-31 22:40:13
【问题描述】:
将代码从 32 位移植到 64 位。很多地方都有
int len = strlen(pstr);
这些现在都会产生警告,因为 strlen() 返回 size_t 是 64 位,而 int 仍然是 32 位。所以我一直用
替换它们size_t len = strlen(pstr);
但我刚刚意识到这是不安全的,因为 size_t 是无符号的,它可以被代码视为已签名(我实际上遇到了一个导致问题的案例,谢谢,单元测试!)。
盲目地将 strlen 返回到 (int) 感觉很脏。或者不应该?
所以问题是:有没有一个优雅的解决方案?我的代码库中可能有一千行这样的代码;我无法手动检查它们中的每一个,并且测试覆盖率目前介于 0.01 和 0.001% 之间。
【问题讨论】:
-
你有这个长度被视为有符号的例子吗?
-
这个例子大概是这样的:
len--; if (len < 0) { break }
标签: c portability 32bit-64bit