首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-05 
关于c语言字符串转换的问题我写了两个函数,希望实现相同的功能。就是对满足条件的字符进行替换。但是两个函

关于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),而未转换之前是正数。

热点排行