【发布时间】:2015-10-05 14:01:42
【问题描述】:
我有 C 中的小程序(子字符串):
char *str_sub(char *string, int from, int to) {
assert(to < 0 || from < to);
if (!(to < strlen(string))) {
printf("%d %ld\n", to, strlen(string));
}
assert(from < strlen(string) && to < strlen(string));
char *result = (char *) calloc(to - from + 1, 1);
memcpy(result, &string[from], to);
result[to] = '\0';
当我将 -1 传递给 to 时,我想让函数与字符串的其余部分匹配,但这并不重要。你看到第二个断言了吗?当我将 -1 传递给 to 时,它会引发错误,在上述情况下,它也会显示 false,但它只是 -1 和 12,正如我们从学校知道的那样,-1
那么问题出在哪里?
【问题讨论】:
-
strlen 返回未签名的 size_t,因此将转换为 -1 和 -1 is always unsigned max。与sizeof case here 非常相似。