当前位置: 首页 > article >正文

strcat,strncat,strstr

在C语言中,strcatstrncatstrstr 是处理字符串的常用函数,它们定义在 <string.h> 头文件中。下面是这些函数的介绍和使用示例:

  1. strcat 函数:

    • 功能:将两个字符串连接起来。strcat 函数将 src 字符串追加到 dest 字符串的末尾,并以空字符 \0 结尾。
    • 原型char *strcat(char *dest, const char *src);
    • 注意dest 必须有足够的空间来容纳连接后的字符串,否则会导致缓冲区溢出。

    示例代码:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char dest[50] = "Hello, ";
        char src[] = "World!";
        
        strcat(dest, src);
        printf("%s\n", dest); // 输出: Hello, World!
        
        return 0;
    }
    
  2. strncat 函数:

    • 功能strncat 函数将 src 字符串的一部分追加到 dest 字符串的末尾,最多追加 n 个字符。如果 src 的长度小于 n,则追加整个 src 字符串。
    • 原型char *strncat(char *dest, const char *src, size_t n);
    • 注意:和 strcat 一样,dest 必须有足够的空间来容纳连接后的字符串。

    示例代码:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char dest[50] = "Hello, ";
        char src[] = "World! This is a test.";
        
        strncat(dest, src, 5); // 只追加 "World!" 到 dest
        printf("%s\n", dest); // 输出: Hello, World!
        
        return 0;
    }
    
  3. strstr 函数:

    • 功能strstr 函数用于在一个字符串中查找第一次出现的另一个字符串,并返回第一次出现的位置的指针。如果没有找到,则返回 NULL
    • 原型char *strstr(const char *haystack, const char *needle);

    示例代码:

    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char haystack[] = "Hello, World! Welcome to the world of C programming.";
        char needle[] = "World";
        
        char *found = strstr(haystack, needle);
        if (found) {
            printf("Found '%s' in '%s'\n", needle, haystack);
        } else {
            printf("'%s' not found in '%s'\n", needle, haystack);
        }
        
        return 0;
    }
    

在使用这些函数时,特别要注意内存管理,确保目标字符串有足够的空间来存储连接后的字符串,以避免缓冲区溢出的安全问题。在实际编程中,可以考虑使用更安全的函数版本,如 strcat_sstrncat_s 等,这些函数在一些编译器中提供了对缓冲区溢出的保护。


http://www.kler.cn/a/378601.html

相关文章:

  • SQL拦截(二)InnerInterceptor
  • Android亮屏Job的功耗优化方案
  • 语言模型的采样方法
  • 【Java设计模式】16-26章
  • SpringBoot+VUE2完成WebSocket聊天(数据入库)
  • 【LwIP源码学习4】主线程tcpip_thread
  • VScode调试
  • nodejs爬虫系统
  • Excel:vba实现批量插入图片批注
  • AI助力医疗:未来的医生会是机器人吗?
  • 使用opencv调用TV_L1算法提取光流
  • MySQL表的增删改查(CRUD1)
  • rk3568 适配 CAN
  • 浏览器、性能优化、前端安全重难点面试题
  • LeetCode 0685.冗余连接 II:并查集(和I有何不同分析)——详细题解(附图)
  • ReactNative Fabric渲染器和组件(5)
  • 【NLP自然语言处理】深入解析Encoder与Decoder模块:结构、作用与深度学习应用
  • 简单题:Base32 编码和解码问题| 豆包MarsCode AI刷题
  • 【多线程奇妙屋】收藏多年的线程安全问题大全笔记(下篇) { 死锁问题 },笔记一生一起走,那些日子不再有
  • STM32 第22章 常用存储器介绍
  • JavaScript 判断数据类型有哪些方法?
  • 1、DevEco Studio 鸿蒙仓颉应用创建
  • Gradient descent algorithm
  • express搭建ts(TypeScript)运行环境
  • ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算
  • 关联容器笔记