我正在制作一个哈希程序,用于计算文本文件中每个单词实例的数量。这是我的计数函数:我在尝试运行它时遇到错误。
56 Expression: (unsigned)(c + 1) <= 256
当它读取文本文件中的第一个非字母垃圾字符时,它似乎在 isalpha 函数上崩溃了。
int
count(ifstream & fs,int size)
{
int find(const char *,int, int);
int f,i,l,y;
char ch,*p,s[maxs+1];
for(y = l = i = 0; i < size; i++)
{
table[i].k = 0;
table[i].p = nill;
}
p = s;
while(fs.get(ch))
{
if(isalpha(ch))
{
if(l < maxs)
{
l++;
*p++ = (char)(ch | 0x20);
}
}
else
{
if(l)
{
*p = '\0';
if(f = find(s,size,l) < 0)
{
return(f);
}
y += f;
p = s;
l = 0;
}
}
}
}
最佳答案
在我看来它像isalpha
断言失败。最有可能 (unsigned)(c + 1) <= 256
是被断言的表达式。看起来这个断言试图确保 c
的值落在 [0, 255] 范围内。
假设ch
是 signed char
然后你尝试将值 128 存储在其中,然后将它传递给 isalpha
,断言的左侧将评估为一个非常大的数字,导致它失败。
128 不能存储在 signed char
中, 所以 ch
的值实际上变为-128,这是无符号128(二进制为1000 0000)的有符号表示。 isalpha
正在服用 ch
作为int
, 所以 (c + 1)
实际上是 (-128 + 1)
,变成 -127。然后将该值转换为一个无符号整数,变成一个非常大的值。
一个解决方案是改变ch
在你的代码中为 unsigned char
,如果它的值有可能大于 127。
关于c++ - 56 表达式 : (unsigned)(c + 1) <= 256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8220041/