×

strncpy实现

strncpy实现(strncpy的用法(对于结构体指针数组,或者结构体二维数组))

admin admin 发表于2023-04-26 14:11:45 浏览28 评论0

抢沙发发表评论

本文目录

strncpy的用法(对于结构体指针数组,或者结构体二维数组)


如果是存在ptr里面。
ptr[i]要去开辟内存,即:
for (i=0;i《256;i++)
for (j=0;j《256;j++)
{
ptr[j]=(char *)malloc(256*sizeof(char));
strncpy(buff[i].ptr[j],str,256*sizeof(char *)-1);
}
如果是arr的话,应当不用。

请用C语言编写程序来实现strncpy strlen strlwr三个功能,不要太复杂的编程,只要能实现就行了!谢谢了


#include 《stdio.h》
char* mystrncpy(char* strdst, const char* strsrc, int count)
{
    char *ret = strdst;
    while (count》0 && *strsrc)
    {
        *strdst = *strsrc;
        strdst++;
        strsrc++;
        count--;
    }
    *strdst = 0;
    return ret;
}
unsigned int mystrlen(const char* str)
{
    unsigned int ret = 0;
    while (*str)
    {
        ret++;
        str++;
    }
    return ret;
}
char* mystrlwr(char* str)
{
    char* ret = str;
    while(*str)
    {
        if (*str 》= 65 && *str 《= 90)
            *str += 32;
        str++;
    }
    return ret;
}
void main()
{
    char strTest = “1234567890ABCDEFGabcdefg“;
    char strResult;
    ;
    printf(“Test mystrncpy for 15 characters: %s\n“, mystrncpy(strResult, strTest, 15));
    printf(“Test mystrncpy for 90 characters: %s\n“, mystrncpy(strResult, strTest, 90));
    printf(“Test mystrlen: %d\n“, mystrlen(strTest));
    printf(“Test mystrlwr: %s\n“, mystrlwr(strTest));
}

C语言的strncpy问题求解


strncpy的参数是char*,而这个函数Database_set,name,和email的类型的是const char*
所以会出错,因为strncpy里面的实现需要操作指针位移,但是const却限制不允许修改指针,
你可以编译这段代码,一定是编译出错,而且会提示const char* 转换char*失败的问题

关于C语言中的strncpy


首先打印出乱码, 肯定是读错了内存导致的, 一般输出字符串都以’\0’为结束符,打印出了乱码肯定你打印的字符串没有在结尾添加结束符导致的...
其次应该知道, strncpy函数, 当拷贝的字节数N小于原字符串的长度时, 是不会把最后的字符串结尾符’\0’考到目标空间的, 所以你需要手动的在目标串的最后添加一个字符串结束符’\0’, 也就是
ch1[len - 1] = ’\0’;(strcpy函数是会吧字符串最后的结束符’\0’考到目标串中的)
当然, 把ch1数组元素全部初始化为’\0’也是个比较好的习惯...
代码可以如下修改:
#include《stdio.h》
#include《string.h》
int main()
{
char ch, ch1;
gets(ch);
int len = strlen(ch);
strncpy(ch1,ch+1 ,len - 1);
ch1[len - 1] = ’\0’;//加上这句
puts(ch1);
printf(“%d\n“,strlen(ch1));
puts(ch);
}

实现了字符串复制函数strncpy,但是老是出错,求指正


1、malloc应该分配c+1个char,因为有结束符\0

2、内存分配老是比10个char型 的多?虽然这可能实际存在,和系统内存管理有关,但你是怎么看出来的?

3、没有free,内存泄露

char *strnxcpy(char *a, char *b, int c)
{
    int n;
    a=(char *)malloc((c+1)*sizeof(char));
    for (n=0;b[n] && n《=c;n++) a[n]=b[n];
    a[n]=0;
    return a;
} // 记得以后free掉malloc的内存

不调用string库函数实现strcpy和strncpy


1
完全可以。建议改,改后代码清晰得多
2
不行。指针p没有分配空间,不能对它拷贝字符串。需要先
p
=
new
char;
用完后
delete
p;
3
函数里dest没有分配空间是因为它要求你在函数执行前就分配好,否则调用会出问题的。