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



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

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