读书人

关于c语言字符串转换的有关问题

发布时间: 2012-04-05 12:42:40 作者: rapoo

关于c语言字符串转换的问题
我写了两个函数,希望实现相同的功能。就是对满足条件的字符进行替换。但是两个函数输出结果却不一样。我也不知道出什么问题了。

1.
void encryptChar()

{

int i,j,len;

char pf;

for(i=0;i<maxline;i++){

len=strlen(xx[i]);

for(j=0;j<len;j++){

pf=xx[i][j]*11%256;

if((pf<=32)||(pf>='0'&&pf<='9'))

;

else

xx[i][j]=pf;

}

}

}
2.
void encryptChar()

{

int i,j,len;

for (i=0; i<maxline; i++)

{

len=strlen(xx[i]);

for(j=0;j<len;j++){

if ((xx[i][j]*11%256>='0' && xx[i][j]*11%256<='9') || xx[i][j]*11%256<=32)

;

else

xx[i][j]= xx[i][j]*11%256;

}

}

}

第二个出的是正确的结果。为什么呢?
我又改写了一下,
void encryptChar()
{
int i,j,len;
char pf;
for(i=0;i<maxline;i++){
len=strlen(xx[i]);
for(j=0;j<len;j++){
pf=xx[i][j]*11%256;
//if((pf<=32)||(pf>='0'&&pf<='9'))
if((xx[i][j]*11%256<=32)||(xx[i][j]*11%256>='0'&&xx[i][j]*11%256<='9'))
;
else
xx[i][j]=pf;
}
}
}

为什么第二个if就能出正确的结果呢?

第一个if为什么就不行呢?

第一个if修改了什么了么?

[解决办法]
貌似char类型做乘法的时候溢出了吧,改成int pf或者unsigned char pf试试,然后自己做类型转换
对于xx[i][j]*11%256 >= '0',不知道编译器是怎么转换类型的,楼下继续
[解决办法]
xx[i][j]*11%256是整型数,该数大于等于0且小于256,将其赋给char型变量时,如果是128~255之间时,转换后是负数(<=32),而未转换之前是正数。

读书人网 >C语言

热点推荐