| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 324 人关注过本帖
标题:请教,指针输出问题
只看楼主 加入收藏
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
结帖率:96%
收藏
已结贴  问题点数:10 回复次数:6 
请教,指针输出问题
写了个函数,按规定要求截取字符串,当调用函数,截取完成后,指针输出却是什么也没有的?请问是什么问题呢?
例如说,比如 str_substr("abcdef", 1, 3); 得到 bc ;
代码看起来长,其实就一部分有用的!
谢谢!
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

static char* str_substr(char *str,const int from, const int to);


int main()
{
    char str[]="abcdef";
    //开始截取条件
    int from=1;   
    //截取完毕条件
    int to=3;
    char *p;
    p=str_substr(str,from,to);
    printf("%s",p);
    system("pause");
    return 0;
}


/**

 *字符串截取

 *@param str: 原字符串

 *@param from: 截取开始的位置

 *@param to: 替换以后的子字符串

 *@return 和str地址一样

 */

static char* str_substr(char *str,const int from, const int to)
{
    char *s_str;
    char *n_str;
    int i=0;
    //分配动态空间
    n_str=(char *)malloc(sizeof(char *)*5);
    memset(n_str,0,10);

    s_str=str;
    //判断截取
    while(i++<to)
    {
        //当达到截取要求时
        if(i>from)
        {
            //把截取的字符元素赋值到新建内存处
            *n_str++=*s_str++;
        }
        else
        {
            //原字符串指针后移,继续判断
            s_str++;
        }
    }
    //新字符串加个结束符
    *n_str='\0';
    //返回新字符串首地址
    return n_str;
}





 
搜索更多相关主题的帖子: 字符串 
2012-12-20 16:51
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:5 
1111

Go Go Go
2012-12-20 16:53
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:5 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
static char* str_substr(char *str,const int from, const int to);
int main()
{
    char str[]="abcdef";
    //开始截取条件
    int from=1;   
    //截取完毕条件
    int to=3;
    char *p;
    p=str_substr(str,from,to);
    printf("%s",p);
    return 0;
}
/**
*字符串截取
*@param str: 原字符串
*@param from: 截取开始的位置
*@param to: 截取结束的位置
*@return :截取的字符串
*/
static char* str_substr(char *str,const int from, const int to)
{
    char *p=str+from;
    *(str+to)='\0';
    return p;
}

[ 本帖最后由 小小战士 于 2012-12-20 17:02 编辑 ]

小小战士,战士中的战斗机!
2012-12-20 16:59
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
from:1,to 3, 第一次 while(i++<to) i=1,不进去,第二次i=2,进去n_str=“c”,第三次i=3,不进去,while退出 n_str="\0";
结果什么都么有。

Go Go Go
2012-12-20 17:05
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
以下是引用zhaoya881010在2012-12-20 17:05:04的发言:

from:1,to 3, 第一次 while(i++
自己先分析下 我觉得问题一下就了然了。

Go Go Go
2012-12-20 17:06
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 4楼 zhaoya881010
第二次的时候,即i=2时,进去了是n_str=b,(*n_str++=*str),先把b给了n_str,然后n_str再后移,退出循环时,n_str已经往后移了,所以给当时位置的n_str加个结束符号,子函数返回n_str的首地址,不应该是这样执行的吗?
2012-12-20 17:20
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 3楼 小小战士
谢谢,你的算法简单好多了。
如果按我那个思路,是因为指针指向结束符了,只要我在开始分配空间的时候再定义一个指针,指向新定义的空间,最后返回这个指针地址也行。谢谢了

[ 本帖最后由 yudeyinji198 于 2012-12-20 17:31 编辑 ]
2012-12-20 17:23
快速回复:请教,指针输出问题
数据加载中...
 
   



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

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