| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 482 人关注过本帖
标题:为嘛又有乱码了??请砖家看看是程序的问题吗??
只看楼主 加入收藏
lymig2011
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2015-1-21
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:8 
为嘛又有乱码了??请砖家看看是程序的问题吗??
如题,程序如下:编译没错,运行出现乱码
图片附件: 游客没有浏览图片的权限,请 登录注册

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char* Strcat(char *str1,char *str2)
{
    int size_str1,size_str2;
    size_str1=sizeof(str1);
    size_str2=sizeof(str2);

    int size=size_str1+size_str2;

    char* tempt=(char*)malloc(sizeof(size));//为两个字符串合并申请内存空间
    char* result=tempt;

    while(*str1!='\0')
    {
        *tempt=*str1;
        tempt++;
        str1++;
    }

    while(*str2!='\0')
    {
        *tempt=*str2;
        tempt++;
        str2++;
    }
    *tempt+='\0';
    return result;

}

int main()
{
    char* a="Hello";
    char* b=",everyone!";
   
    printf("string a=%s\n",a);
    printf("string b=%s\n",b);

    printf("字符串连接后为:\n");
    printf("%s\n",Strcat(a,b));
   

    system("pause");

    return 0;
}
搜索更多相关主题的帖子: include result 字符串 空间 
2015-01-23 21:39
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:2 
size_str1=sizeof(str1);
在函数里sizeeof指针参数长度只会得到你cpu的地址位数所占用的字节数,16位为2,32位为4,64位为8,所以你不能通过该指令获取字符串长度,这样你申请的动态字串空间和实际的字符串长度不等就会出现乱码。你必须通过探测字符串结束符\n来获取字符串实际长度。

[ 本帖最后由 wmf2014 于 2015-1-23 22:13 编辑 ]

能编个毛线衣吗?
2015-01-23 22:11
lymig2011
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2015-1-21
收藏
得分:0 
以下是引用wmf2014在2015-1-23 22:11:07的发言:

 size_str1=sizeof(str1);
在函数里sizeeof指针参数长度只会得到你cpu的地址位数所占用的字节数,16位为2,32位为4,64位为8,所以你不能通过该指令获取字符串长度,这样你申请的动态字串空间和实际的字符串长度不等就会出现乱码。你必须通过探测字符串结束符\n来获取字符串实际长度。

sizeof得到的不是变量所占的字节数吗?
2015-01-23 22:21
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:3 
    char* tempt=(char*)malloc(sizeof(size))这句也不对,括号里放入字节数就可以了,你的sizeof(size)应该等于4(因为size为整型站四个字节,相当于sizeof(int))

一片落叶掉进了回忆的流年。
2015-01-23 22:23
lymig2011
Rank: 1
等 级:新手上路
帖 子:12
专家分:1
注 册:2015-1-21
收藏
得分:0 
以下是引用诸葛欧阳在2015-1-23 22:23:02的发言:

    char* tempt=(char*)malloc(sizeof(size))这句也不对,括号里放入字节数就可以了,你的sizeof(size)应该等于4(因为size为整型站四个字节,相当于sizeof(int))

好像是这么回事
那要计算两个字符串的长度应该怎么写??
2015-01-23 22:52
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:2 
回复 5楼 lymig2011
用strlen()函数

一片落叶掉进了回忆的流年。
2015-01-23 23:56
lovegh
Rank: 5Rank: 5
来 自:图灵学院
等 级:职业侠客
威 望:3
帖 子:117
专家分:311
注 册:2015-1-23
收藏
得分:1 
sizeof我只用在判断类型的字节数,至于什么平台的区分,有看过,但是没去记住,代码还有个错误的地方。最后补上'\0',应该是*tempt = '\0'

别老是写代码,要多陪妹子,多了解老婆大人,血淋淋的教训。
2015-01-24 01:02
八画小子
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:37
帖 子:709
专家分:2063
注 册:2010-11-11
收藏
得分:1 
以下是引用lymig2011在2015-1-23 22:21:55的发言:


sizeof得到的不是变量所占的字节数吗?

你说的确实没错,sizeof确实得到的是变量所占的字节数。但你传入sizeof中的str1和str2是一个指针,说白了就是一个内存单元的地址,不是逻辑意义上的字符串。(严格意义上来说,C语言没有内置字符串这种类型。)
2015-01-24 15:10
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
又是指针等同数组邪说的祸害。

授人以渔,不授人以鱼。
2015-01-24 16:16
快速回复:为嘛又有乱码了??请砖家看看是程序的问题吗??
数据加载中...
 
   



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

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