鱼C论坛

 找回密码
 立即注册
查看: 1402|回复: 7

[已解决]strncpy函数修改

[复制链接]
发表于 2022-4-24 16:18:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
strncpy函数将指定字符串的指定长度复制到另外一个字符串,我想在前面加一个偏移量,从指定的位置开始复制,而不是从头开始,将指定位置的指定长度的指定字符串复制到另外一个字符串,可是最后的输出一直的空
直接拿strncpy的源码进行修改的,求大佬帮忙解惑
char* strncpy_ch(char* dest, const char* source, size_t count,size_t begin)
{
        char* new_dest = dest+begin;
        char* start=new_dest;
        while (count && (*new_dest++ = *source++))
                count--;
        if(count)
                while (--count)
                        *new_dest++='\0';
        return(start);
}
最佳答案
2022-4-24 17:51:10
本帖最后由 jackz007 于 2022-4-24 18:03 编辑

        偷懒写的
#include <stdio.h>
#include <string.h>

char * strncpy_ch(char * dest , const char * source , size_t count , size_t begin)
{
        return strncpy(dest , & source[begin] , count) ;
}
        自己写的
#include <stdio.h>

char * strncpy_ch(char * dest , const char * source , size_t count , size_t begin)
{
        int c , i , n                                                                                      ;
        for(c = n = 0 ; source[n] ; n ++)                                                                  ;
        if(n > 0 && count < n) for(c = 0 , i = begin ; c < count && source[i] ;) dest[c ++] = source[i ++] ;
        dest[c] = '\0'                                                                                     ;
        return dest                                                                                        ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-24 16:27:42 | 显示全部楼层
将指定位置的指定长度的指定字符串复制到另外一个字符串,
这个你不应该传入指定字符串后先移动指针到指定位置吗,然后剩下就和strncpy一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-24 16:32:26 | 显示全部楼层
(char* dest, const char* source, size_t count,size_t begin)
你是要将参数1的指针的字符串的第begin位置开始拷贝count个到source吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-24 16:59:26 | 显示全部楼层
想入门的新人 发表于 2022-4-24 16:32
(char* dest, const char* source, size_t count,size_t begin)
你是要将参数1的指针的字符串的第begin位 ...

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-24 17:01:30 | 显示全部楼层
想入门的新人 发表于 2022-4-24 16:27
将指定位置的指定长度的指定字符串复制到另外一个字符串,
这个你不应该传入指定字符串后先移动指针到指定 ...

是的,所以我先把dest部分加了begin个单位,生成一个新的字符串new_dest,后面部分再复制,可以发现这个样子最后的输出是null
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-24 17:51:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-4-24 18:03 编辑

        偷懒写的
#include <stdio.h>
#include <string.h>

char * strncpy_ch(char * dest , const char * source , size_t count , size_t begin)
{
        return strncpy(dest , & source[begin] , count) ;
}
        自己写的
#include <stdio.h>

char * strncpy_ch(char * dest , const char * source , size_t count , size_t begin)
{
        int c , i , n                                                                                      ;
        for(c = n = 0 ; source[n] ; n ++)                                                                  ;
        if(n > 0 && count < n) for(c = 0 , i = begin ; c < count && source[i] ;) dest[c ++] = source[i ++] ;
        dest[c] = '\0'                                                                                     ;
        return dest                                                                                        ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-25 13:29:50 | 显示全部楼层
jackz007 发表于 2022-4-24 17:51
偷懒写的

        自己写的

给大佬递茶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-25 13:36:43 | 显示全部楼层
jackz007 发表于 2022-4-24 17:51
偷懒写的

        自己写的

谢谢大佬,想通了,我偏移量加错地方了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表