微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何检查char * p是否到达C字符串的末尾?

如何解决如何检查char * p是否到达C字符串的末尾?

|
template<class IntType>
IntType atoi_unsafe(const char* source)
{
    IntType result = IntType();
    while (source)
    {
        auto t = *source;
        result *= 10;
        result += (*source - 48);
        ++source;
    }
    return result;
}
main()
中,我有
char* number = \"14256\";
atoi_unsafe<unsigned>(number);
但是条件
while (source)
似乎无法识别
source
已遍历整个C字符串。如何正确检查字符串的结尾?     

解决方法

        
while(source)
直到指针回绕为0才成立,但是在现代系统中,可能早于此崩溃。您需要取消引用指针以查找空字节
while(*source)
。 我讨厌发布简短答案     ,        指针在字符串末尾不会为零;当指向的值变为零时,将找到字符串的结尾。因此:
while (*source != \'\\0\')
您可以更紧凑地将整个函数编写为:
template<class IntType>
IntType atoi_unsafe(const char* source)
{
    IntType result = IntType();
    char c;
    while ((c = *source++) != \'\\0\')
        result = result * 10 + (c - \'0\');
    return result;
}
当然,它不使用
auto
关键字。还要注意note10和ѭ11之间的区别。循环主体中赋值中的括号不是必需的。 您的代码只处理没有符号的字符串-可以说应该验证字符实际上也是数字(如果输入无效,则可能引发异常)。 “不安全”的称谓当然适用。还要注意,如果实例化一个有符号整数类型的模板并且该值溢出,则会调用未定义的行为。至少对于无符号类型,算术被定义,即使可能不是预期的。     ,        您需要在字符串末尾查找空终止符。等待指针回绕到
0
可能永远不会发生。将
while (*source)
用于循环。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。