+ -

C语言strncpy、strcpy、strncat、memcpy、strstr和strtok的区别

时间:2025-07-25

来源:互联网

在手机上看
手机扫描阅读

在C语言中,字符串操作是开发过程中最常见、最基础的任务之一。C标准库 <string.h> 提供了多个用于字符串处理的函数,其中 strcpy、strncpy、strncat、memcpy、strstr 和 strtok 是最常用的几个函数。虽然它们都能用于操作字符串,但功能、使用方式和适用场景各不相同。

本文将围绕这六个函数展开详细讲解,重点分析它们的作用、使用方式、区别与注意事项,帮助开发者在实际开发中合理选择和使用这些函数。

一、strcpy:字符串复制函数

strcpy 是最基础的字符串复制函数,用于将一个字符串完整地复制到另一个字符串中。

  • 函数原型

  • char*strcpy(char*dest,constchar*src);
  • 使用方式

  • chardest[50];
    charsrc[]="Hello,world!";
    strcpy(dest,src);
  • 特点与注意事项

  • 不检查目标缓冲区大小,容易造成缓冲区溢出;

    不安全,建议在已知目标空间足够时使用;

    会自动复制字符串结尾的 \0 字符。

    二、strncpy:带长度限制的字符串复制函数

    strncpy 是 strcpy 的增强版,允许指定复制的最大字符数,从而避免缓冲区溢出。

  • 函数原型

  • char*strncpy(char*dest,constchar*src,size_tn);
  • 使用方式

  • chardest[10];
    constchar*src="Hello,world!";
    strncpy(dest,src,sizeof(dest)-1);
    dest[sizeof(dest)-1]='\0';//手动添加结束符
  • 特点与注意事项

  • 最多复制 n 个字符;

    不会自动添加 \0,需手动补上;

    如果 src 的长度小于 n,dest 剩余部分会被填充 \0;

    更安全,适用于缓冲区大小受限的场景。

    三、strncat:带长度限制的字符串拼接函数

    strncat 用于将一个字符串追加到另一个字符串的末尾,同时可以限制追加的字符数。

  • 函数原型

  • char*strncat(char*dest,constchar*src,size_tn);
  • 使用方式

  • chardest[50]="Hello";
    constchar*src="world!";
    strncat(dest,src,sizeof(dest)-strlen(dest)-1);
  • 特点与注意事项

  • 保证最终字符串以 \0 结尾;

    会跳过 dest 中的 \0 开始拼接;

    需确保目标缓冲区有足够空间;

    适合拼接字符串但需控制长度的场景。

    四、memcpy:通用内存拷贝函数

    memcpy 不仅用于字符串,还可以用于任意类型的数据块复制,是最通用的内存拷贝函数。

  • 函数原型

  • void*memcpy(void*dest,constvoid*src,size_tn);
  • 使用方式

  • intsrc[]={1,2,3,4,5};
    intdest[5];
    memcpy(dest,src,sizeof(src));
  • 特点与注意事项

  • 不依赖字符串结束符,适用于任意数据类型;

    不检查重叠内存区域(如需处理重叠区域,应使用 memmove);

    不自动添加 \0,不适合直接用于字符串操作;

    性能高,适用于数据块复制、结构体拷贝等场景。

    五、strstr:字符串查找函数

    strstr 用于在一个字符串中查找另一个字符串的首次出现位置。

  • 函数原型

  • char*strstr(constchar*haystack,constchar*needle);
  • 使用方式

  • constchar*text="Thisisateststring.";
    constchar*pattern="test";
    char*result=strstr(text,pattern);
    if(result!=NULL){
    printf("Foundatposition:%ld\n",result-text);
    }
  • 特点与注意事项

  • 返回值为 NULL 表示未找到;

    区分大小写;

    可用于文本分析、日志处理、关键字匹配等;

    不修改原始字符串,仅用于查找。

    六、strtok:字符串分割函数

    strtok 用于将字符串按照指定的分隔符进行分割,常用于解析 CSV、日志等格式的数据。

  • 函数原型

  • char*strtok(char*str,constchar*delim);
  • 使用方式

  • charstr[]="apple,banana,orange";
    char*token=strtok(str,",");
    while(token!=NULL){
    printf("%s\n",token);
    token=strtok(NULL,",");
    }
  • 特点与注意事项

  • 会修改原始字符串,插入 \0 分隔;

    不是线程安全的(线程安全版本为 strtok_r);

    适用于一次性解析字符串,不适合多次调用;

    常用于解析配置文件、命令行参数等。

    C语言strncpy、strcpy、strncat、memcpy、strstr和strtok的区别

    在C语言开发中,熟练掌握 strcpy、strncpy、strncat、memcpy、strstr 和 strtok 这些字符串操作函数,是编写高效、安全程序的关键。它们各有用途和限制,开发者应根据具体需求选择合适的函数。

    以上就是php小编整理的全部内容,希望对您有所帮助,更多相关资料请查看php教程栏目。

    热门下载

    更多