| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 636 人关注过本帖
标题:帮看下原因,为啥输出后面几位是乱码?
只看楼主 加入收藏
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
帮看下原因,为啥输出后面几位是乱码?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 20
char *fn(char *p,int m)
{
    char s[50];
    int i;
    p=p+m-1;i=0;
    while(*p!='\0')
    {
        s[i]=*p;
        p++;i++;      
        }
    s[i]='\0';
    return s;
}
main()
{
    char string[n];
    int m;
    char *p;
    printf("输入一个字符串。\n");
    gets(string);
    printf("输入数字m。");
    scanf("%d",&m);
    p=fn(string,m);
    while(*p!='\0')
    {
        printf("%c",*p);
        p++;
        }
    system("pause");
}

就是取一个字符串的m位开始输出
搜索更多相关主题的帖子: 乱码 输出 
2010-07-07 10:30
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:20 
这个的主要问题是变量作用域的关系
s[50]被定义为局部变量,当函数被调用完毕后内存区域被释放,所有的数据都消失。所以,通过函数传回去的只是你输入的字符串第m-1个
字符的地址而已
所以,最后的while函数中p++会使p成为野指针,输出补丁,正确的做法是把s[50]定义为全局变量代码和输出结果如下
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 20
char s[50];
char *fn(char *p,int m)
{
    int i;
    p=p+m-1;i=0;
    while(*p!='\0')
    {
        s[i]=*p;
        p++;i++;     
        }
    s[i]='\0';
    return s;
}
main()
{
    char string[n];
    int m;
    char *p;
    printf("输入一个字符串。\n");
    gets(string);
    printf("输入数字m。");
    scanf("%d",&m);
    p=fn(string,m);
    while(*p!='\0')
    {
        printf("%c",*p);
        p++;
        }
    system("pause");
}
图片附件: 游客没有浏览图片的权限,请 登录注册

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-07-07 12:37
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:0 
茅塞顿开。。。谢谢楼上的啊。。。自己也一直觉得程序感觉很别扭,就是想不出问题在哪里。。。感谢~
2010-07-07 13:02
快速回复:帮看下原因,为啥输出后面几位是乱码?
数据加载中...
 
   



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

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