我现在正在学习Comp Sci
课程,我的老师在课桌上写的一个例子如下 - 概念是创建一个string
长度函数,返回一个{{ 1}}使用指针算法的字符串长度。我理解这个概念但每次尝试这个例子时我的结果都是size_t
。
0
如果有人能够提供有关出错的信息,我会非常感激。
谢谢! :)
答案 0 :(得分:3)
for( ; *str; str++, idx++){
return(idx);
}
将在第一次迭代时返回idx
。你需要做的是让for循环运行然后返回idx
。那看起来像是:
for( ; *str; str++, idx++){}
return(idx);
您可以使用;
结束for语句但我发现很容易错过。通过使用一个空的花括号块,它表明你打算有一个空的循环体
答案 1 :(得分:2)
如@IgorTandetnik所示,你的循环在1次迭代后终止
size_t strlen(const char* str){
size_t idx = 0;
for( ; *str; str++, idx++){
return(idx); // <------ here
}
}
Clang实际上使用-Weverything
警告级别
> main.cpp:15:18: warning: loop will run at most once (loop increment
> never executed) [-Wunreachable-code-loop-increment]
> for( ; *str; str++, idx++){
> ^~~~~~~~~~~~
修复很简单:
size_t strlen(const char* str){
size_t idx = 0;
for( ; *str; str++, idx++) {} // here
return(idx);
}
答案 2 :(得分:2)
这个版本实际上使用指针算法:
size_t strlen(const char* str)
{
const char * const os = str;
while ( *str ) ++str;
return str - os;
}
答案 3 :(得分:0)
size_t strlen(const char* str){
int idx = 0;
while(*str++)
idx++;
return idx;
}
尝试上面的内容,看看你是否得到正确的字符串长度。