| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1312 人关注过本帖
标题:关于strncpy函数源代码 请问我的这个代码错在哪?
只看楼主 加入收藏
lateraware
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2012-2-9
结帖率:66.67%
收藏
已结贴  问题点数:1 回复次数:9 
关于strncpy函数源代码 请问我的这个代码错在哪?
运行出来时乱码
#include <iostream>
using namespace std;

char *mystrncpy(char *str2, const char *str1, int n)
{
    int i = 0;
    char *dest = str2;
    while(*str1 != '\0' && i < n)
    {
        *str2++ = *str1++;
        i++;
    }
    return dest;
}

void main()
{
    char *p = "abcde";
    char *q = new char(20);
    char *w = mystrncpy(q,p,3);
    cout << w << endl;
    system("pause");
}


为什么下面这段代码也是错的?
#include <iostream>
using namespace std;

void main()
{
    char *p = new char[20];
    char *q = "abcde";
    strncpy(p, q, sizeof(q));
    cout << p << endl;
    system("pause");
}


[ 本帖最后由 lateraware 于 2012-2-23 23:31 编辑 ]
搜索更多相关主题的帖子: void 函数 include 源代码 system 
2012-02-23 23:08
红色警戒
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:19
帖 子:444
专家分:2967
注 册:2005-11-20
收藏
得分:1 
mystrncpy  最后要给字符串赋值\0,还有str1长度大于str2就会出问题。

[ 本帖最后由 红色警戒 于 2012-2-24 10:02 编辑 ]

2012-02-24 09:59
gb5543925
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2012-2-24
收藏
得分:0 
明显没有复制 str2的 ‘/0’过去,  写成  
char *strncpy(char *dest, const char *src, size_t count)
{
    char *tmp = dest;

    while (count) {
        if ((*tmp = *src) != 0)
            src++;
        tmp++;
        count--;
    }
    return dest;
}
2012-02-24 11:26
gb5543925
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2012-2-24
收藏
得分:0 
你二段代码用法错误啊, sizeof(q)的数值是5啊, 也就是你的n是5啊, 你没有算‘/0’进去啊, 应该改成strncpy(p, q, sizeof(q)+1);就对了啊, 不过按照我的习惯 会给在之前 bzero(p,20);先把p空间的内容都清零了,以免造成什么意外情况
2012-02-24 11:31
BianChengNan
Rank: 8Rank: 8
等 级:贵宾
威 望:13
帖 子:302
专家分:972
注 册:2011-11-30
收藏
得分:0 
以下是引用gb5543925在2012-2-24 11:31:56的发言:

你二段代码用法错误啊, sizeof(q)的数值是5啊, 也就是你的n是5啊, 你没有算‘/0’进去啊, 应该改成strncpy(p, q, sizeof(q)+1);就对了啊, 不过按照我的习惯 会给在之前 bzero(p,20);先把p空间的内容都清零了,以免造成什么意外情况
额,好像对指针进行sizeof结果都是4啊,(32位机子下面是这样的)可以测试的哈

我的群:149544757 C/C++/Assembly 喜欢交流的朋友进,进群请写消息
2012-02-24 11:55
gb5543925
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2012-2-24
收藏
得分:0 
回复 5楼 BianChengNan
是4 ,我疏忽了, 那个p和q搞混了, 对数组名 sizeof的话 是 数组的整体大小,他这个应该是 strlen(q)+1才对~ 我囧
2012-02-24 12:12
lateraware
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2012-2-9
收藏
得分:0 
回复 2楼 红色警戒
没错 出乱码的原因就是没有 '\0'
2012-02-25 00:01
lateraware
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2012-2-9
收藏
得分:0 
回复 6楼 gb5543925
是的 strlen这个用得好!呵呵
2012-02-25 00:06
lateraware
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2012-2-9
收藏
得分:0 
#include <iostream>
#include <cstdlib>
using namespace std;

char *mystrncpy(char *dest, const char *src, size_t count)
{
    char *tmp = dest;
    dest[count] = '\0';
    while (count) {
        if ((*tmp = *src) != '\0')
            src++;
        tmp++;
        count--;
    }
    return dest;
 }

int main()
{
    char *p = "abcde";
    char *q = new char[20];
    char *w = mystrncpy(q,p,3);
    cout << w << endl;
    system("pause");
    return 0;
}


2012-02-25 00:13
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
char* strncpy(char* to, const char* from, size_t count) {
    char* cp = to;
    while (*from && count--)
        *cp++ = *from++;
    *cp = '\0';
    return to;
}

My life is brilliant
2012-02-26 14:54
快速回复:关于strncpy函数源代码 请问我的这个代码错在哪?
数据加载中...
 
   



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

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