strncpy 范围 strch

本文展示了一个使用C语言的程序示例,该程序通过strchr函数遍历字符串helloworlditcast来查找所有出现的字符'o'的位置。每个找到的'o'的位置及其之后的子串都会被打印出来。
#include <stdio.h>
#include <string.h>
#include <stdio.h>
#include <string.h>

//#define NULL (void *)0

int main(void)
{
    char s1[] = "hello world itcast";
    char key = 'o';
    char *p, *q;
    
    q = s1;
    while ((p = strchr(q, key)) != NULL) {
        printf("%p\n", p);
        printf("%s\n", p);
        q = p+1;
    }

    return 0;
}


此函数没有在dest数组里默认加'\0',需要手动自己加。注意。


#include <stdio.h>
#include <string.h>


//#define NULL (void *)0


int main(void)
{
    char s1[] = "hello world itcast";
    char key = 'o';
    char *p, *q;
    
    q = s1;
    while ((p = strchr(q, key)) != NULL) {
        printf("%p\n", p);
        printf("%s\n", p);
        q = p+1;
    }


    return 0;
}



                
Strncpy函数是C语言中的一个字符串处理函数,以下是关于它的使用、功能及注意事项的介绍: ### 功能 Strncpy函数用于将一个字符串的指定长度的字符复制到另一个字符串中。与strcpy函数不同,strncpy函数指定了拷贝的长度,源字符串不一定要有`\0`,相对strcpy函数更加安全[^1]。 ### 使用方法 以下是一个使用strncpy函数的示例代码: ```c #include <stdio.h> #include <string.h> int main() { char dest[10]; char src[] = "abcdef"; strncpy(dest, src, 3); dest[3] = '\0'; // 手动添加字符串结束符 printf("%s\n", dest); return 0; } ``` 在这个示例中,`strncpy(dest, src, 3)`将`src`字符串的前3个字符复制到`dest`字符串中。 ### 注意事项 - **目标空间大小**:在使用strncpy函数时,需要考虑目标空间的大小是否够用。如果目标空间不足以容纳指定长度的字符,可能会导致数据溢出[^1]。 - **字符串结束符**:strncpy函数不会自动在目标字符串的末尾添加`\0`。如果源字符串的长度小于指定的复制长度,strncpy会在复制完源字符串后,在目标字符串的剩余部分填充`\0`;如果源字符串的长度大于或等于指定的复制长度,目标字符串将不会以`\0`结尾,需要手动添加`\0`以确保它是一个有效的C字符串[^1]。 - **模拟实现注意**:在模拟实现strncpy函数时,需要考虑源字符串第num个字符为`\0`的情况,对于超出源字符串长度的部分,要给目标字符串拷贝上`\0` [^2]。 以下是一个模拟实现strncpy函数的代码: ```c #include <stdio.h> #include <assert.h> char* my_strncpy(char* dest, const char* src, size_t num) { assert(dest && src); // 用断言判断dest和src是否为空指针 char* start = dest; // 保存dest的初始地址 while (num && (*dest++ = *src++)) { // 判断num是否为0,并且判断src是否结束 num--; } if (num) { // 判断num是否为0 while (--num) { // 处理了src第num个字符为'\0'的情况(从1开始算) *dest++ = '\0'; // 超出src的部分给dest拷贝上'\0' } } return start; // 返回dest的初始地址 } int main() { char arr1[7] = "*"; char arr2[] = "abcdef"; printf("%s\n", my_strncpy(arr1, arr2, 6)); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值