c++ - 调试断言失败,表达式:(unsigned)(c +1)<= 256提问c++

标签 c++ for-loop visual-c++ c-strings isspace

我要计算空格数。据我了解,编译器在这一行发誓 isspace(s [step])!= 0 。但是有时代码会启动,并且没有错误。我不知道为什么会这样。

char s[] = "So she was considering";

int number_space = 0, step = 0;
int length_string = strlen(s);

while(strlen(s) != step){
    if(isspace(s[step]) != 0){ 
        number_space++;
    }
step++;
}

cout << number_space;

最佳答案

你必须写

if ( isspace( static_cast<unsigned char>( s[step] ) ) != 0 ){ 

要么
if ( isspace( ( unsigned char )s[step] ) != 0 ){ 

否则,通常表达式s [step]会产生负值。

此代码段
int number_space = 0, step = 0;
int length_string = strlen(s);

while(strlen(s) != step){
    if(isspace(s[step]) != 0){ 
        number_space++;
    }
step++;
}

可以更简单地重写
size_t number_space = 0;

for ( size_t i = 0; s[i] != '\0'; i++ )
{
    if ( isspace( static_cast<unsigned char>( s[i] ) ) )
    {
        number_space++;
    } 
}   

那就是没有必要在循环的情况下调用strlen

关于c++ - 调试断言失败,表达式:(unsigned)(c +1)<= 256提问c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493555/

相关文章:

c++ - 在 XCode 中用 C++ 重命名

c++ - 如何创建指针来更新 C++ 中的动态 STL vector ?

javascript - 锻炼 : rna-transcription. 苦苦寻求解决方案

c++ - 在 typeid 检查有效后使用 reinterpret_cast 吗?

c++ - 混淆 C++ prime 加上动态数组的例子

c++ - 如何使用 cmake 启用 qt dbus 编码(marshal)处理?

javascript - 使用对象的属性从数组中查找和更改对象的一些更好的方法

java - 我们可以在移动到android中的下一次迭代之前制作一个for循环以在每次迭代中获取用户输入吗

c++ - 使用类定义中的推断维度初始化静态常量多维数组

c++ - VS2015拒绝未命名类型的类内初始化