我正在制作一个哈希程序,它计算文本文件中每个单词实例的数量.这是我的计数功能:我在尝试运行它时遇到错误.
表达式:(无符号)(c + 1)<= 256
当它正在读取文本文件中的第一个非alpha垃圾字符时,它似乎在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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
它看起来像是isalpha失败的断言.最有可能(unsigned)(c + 1) <= 256的是被断言的表达式.看起来这个断言试图确保c跌落的值在[0,255]之内.
假设ch是a signed char并且您尝试将值128存储在其中,然后将其传递给isalpha,断言的左侧将评估为非常大的数字,从而导致其失败.
128不能存储在a中signed char,因此ch实际值变为-128,这是无符号128(二进制为1000 0000)的有符号表示.isalpha正在ch为一个int,所以(c + 1)实际上(-128 + 1),这成为-127.然后将此值转换为无符号整数,该整数变为非常大的值.
解决方案是将ch代码更改为a unsigned char,如果它的值可能大于127.
| 归档时间: |
|
| 查看次数: |
5750 次 |
| 最近记录: |