标题:关于strncpy函数源代码 请问我的这个代码错在哪?
取消只看楼主
lateraware
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2012-2-9
结帖率:66.67%
已结贴  问题点数:1 回复次数:3 
关于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
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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-361494-1-1.html




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

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