【发布时间】:2019-03-28 02:17:37
【问题描述】:
有没有更好的方法来获得正确长度的包含数字的数组?
我有一个数字数组:0, 0, 1,我尝试获取它的长度。它显然会中断并返回0。我是C 的新手,但我尝试自定义strlen 函数:
int custom_strlen(char *str) {
for(int i = 1; ;i++) {
if (str[i] == 0) {
return i;
}
}
return -47;
}
但它不是那么有效,并且在某些情况下还会返回意外的值。在这种情况下,预期输出为 3。
有什么功能可以用吗?
【问题讨论】:
-
如果不使用哨兵(即:非数字值),则无法做到这一点,(您不知道何时停止)
-
如果它不是以 NUL 结尾的字符串,则不能在其上运行
strlen。你是如何终止这个“数字数组”的? -
不,如果数组的任何位置都可能包含零,那么它就不是C字符串,不能使用任何字符串函数。
-
请创建一个 MCVE (minimal reproducible example)。如果我们能看到足够多的代码,它将解决各种“whaddya mean by ...”问题。为什么开始查看数组索引
1而不是0? C 中的数组从 0 开始索引,而不是 1。您的代码将在空字符串上失败(或者,更确切地说,由于访问字符串末尾之外的数据的未定义行为而返回不可预测的长度)。 -
这个“数字数组”的内容究竟是什么?表示二进制数的常用方法是使用
'0'和'1',而不是0和1。如果您这样做,您可以使用预定义的strlen函数。您的函数和标准strlen都必须假设数组中某处有一个终止'\0'。
标签: c arrays string-length