| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 252 人关注过本帖
标题:一个简单的程序,但是有一个问题十分不解
只看楼主 加入收藏
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
结帖率:97.22%
收藏
已结贴  问题点数:30 回复次数:8 
一个简单的程序,但是有一个问题十分不解
程序代码:
#include<stdio.h>
#include<string.h>
#include <stdlib.h>

void dy(char*a);  //应申明函数

int main ( )
{
    char a[50];
    printf("输入一串数字:");
    fgets(a,sizeof a,stdin);  //不能用scanf读取,因为它一碰到空格就结束字符串类型的读入
    a[strlen(a)-1] = '\0';
    dy(a);
    printf("得出结果:%s",a);
    return 0;
}

//在这里改了很多,具体没有说明,自己先看看吧
void dy(char a[])
{
    int i=0;
    char *temp = (char*)malloc(sizeof a);

    strcpy(temp,a);
   while((strlen(temp)-2-i) >= 0)
   {
       printf("str == %d\n",strlen(temp)-2-i);
       a[i] = temp[strlen(temp)-2-i];
       i++;
       printf("%d",i);
   }
   a[i] = '\0';
   printf("%d\n",strlen(a));
   return;
}

出现了比较严重的问题,检查这里发现:
程序代码:
 while((strlen(temp)-2-i) >= 0)
   {
       printf("str == %d\n",strlen(temp)-2-i);
       a[i] = temp[strlen(temp)-2-i];
       i++;
       printf("%d",i);
   }


当(strlen(temp)-2-i)的值为负1时
并没有跳出while循环,怎么会这样呢?
搜索更多相关主题的帖子: color 
2012-12-09 22:48
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
strlen 好像是无符号的,也就是说他不可能出现-1的情况,印象中是个SIZE_T类型的
楼主应该把它转成 有符合(比如int)在做判断

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:53
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:20 
while((strlen(temp)-2-i) >= 0)
改成
while(((int)strlen(temp)-2-i) >= 0)

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-09 22:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
你用strlen 和int进行比较 编译器没有警告吗

我的经验是  警告信息往往都不是瞎警告的

DO IT YOURSELF !
2012-12-09 22:54
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我知道,strlen(temp)得到的值为5(这个以检查过)
但((strlen(temp)-2-i)得到的值是可以为负的
可当它为负是while循环还是运行了,
二楼看看题先...

I have not failed completely
2012-12-09 22:56
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
回复 3楼 yuccn
哦,我懂了,
转换数据可能会丢失信息的...真是倒霉了,撞上这岔...
学习了...

I have not failed completely
2012-12-09 22:58
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
strlen(temp)把后面的类型全变成size_t类型的了,结果怎么也小于不了0...
本来这是别人的一个问题,结果我解决时又碰到了问题,杯具啊...不过也学到了点东西

I have not failed completely
2012-12-09 23:02
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
这句不对,strlen(temp)把后面的类型全变成size_t类型的了

总有那身价贱的人给作业贴回复完整的代码
2012-12-09 23:08
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
看看书上,在讲类型转换的时候应该说了

总有那身价贱的人给作业贴回复完整的代码
2012-12-09 23:09
快速回复:一个简单的程序,但是有一个问题十分不解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043004 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved