字符串处理函数

1. 拷贝 strcpy
2. 追加 strcat
 
#include <string.h>  
char *strcpy(char *dest, const char *src); 将字符串src 复制到字符数组 dest
char *strncpy(char *dest, const char *src, size_t n); 将字符串src开始的 n个字节复制到字符数组dest

char *strcat(char *dest, const char *src);

将字符串src接在字符串数组dest的后面
char *strncat(char *dest, const char *src, size_t n); 将字符串src开始的n个字符接在字符串数组的dest后面
 
字符串拷贝有三要素:
1.从哪里拷贝
2.拷贝到哪里去
3.拷贝多少空间?
    strcpy是不安全的,因为它是以'\0'作为拷贝的结束符,并没有规定拷贝的大小,因此会造成内存泄漏.
    所以后来在 strcpy 的基础上,追加了strncpy
    strcpy是将一个字符串拷贝给另一个空间
    strncpy 是在此基础上规定拷贝字符串的大小.如果没有规定大小,将一个无线大的字符串拷贝给内存,将造成重要资料崩溃.

解读:

char *strncpy(char *dest, const char *src, size_t n);
首先看参数:
拷贝到那里去: char *dest 说明这是一个允许修改的字符串指针.也确实是这样.
从哪里拷贝: const char *src 这是一个不允许修改的字符串指针,这样设计是合理的,我们不希望将一个字符串拷贝给另一个字符串后,原来的字符串给没了.所以const保护是正确的
拷贝多少: size_t n xxx_t 是 typedef的标志,反正就是长度的意思,这个参数规定了要拷贝字符串的大小.

然后看返回值:

The strcat() and strncat() functions return a pointer to the resulting string dest.
char *返回的是dest的指针.
 
 
char *strncpy(char *dest, const char *src, size_t n);
  1. -------------------------------------------------------
  2. int main(int argc, char **argv) {
  3.  
  4. const char *src="hello strncpy";
  5.  
  6. char dest[];
  7.  
  8. strncpy(dest,src,strlen(src)); //将src里面的字符串拷贝到dest,strlen将记录不包括'\0'的字符串实际长度,因此在结尾手动补零
  9. dest[strlen(src)]=; //在字符串后面补0
  10. printf("i am src: %s\n",src);  //hello strncpy
  11. printf("i am dest: %s\n",dest);  //hello strncpy
  12. }
  13.  
  14. -------------------------------------------------------

char *strncat(char *dest, const char *src, size_t n);

  1. -------------------------------------------------------
  2. int main(int argc, char **argv) {
  3. const char *str1="strcat";
  4.  
  5. char buf[]={"hello,"};
  6.  
  7. strncat(buf,str1,strlen(str1));
  8.  
  9. printf("%s\n",buf); //hello,strcast
  10.  
  11. }
  12. -------------------------------------------------------

C语言字符篇(二)字符串处理函数的更多相关文章

  1. c语言字符数组与字符串的使用详解

    转自:http://www.jb51.net/article/37456.htm 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ ...

  2. C语言字符数组和字符串

    用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符数组 char c[20]={'c', ' ', 'p', 'r', 'o' ...

  3. C语言中常用的字符串处理函数总结

    C语言中字符串处理函数备注 此文仅用于自己研究和记录 字符串处理函数 1. char *gets(char *s); #include<stdio.h> 功能: 从标准输入读入字符,并保存 ...

  4. Excel怎样从一串字符中的某个指定“字符”前后截取字符及截取字符串常用函数

    怎么样可以从一串字符中的某个指定位置的前或后截取指定个数的字符. 如:12345.6789,我要截取小数点前(或后)的3个字符.怎么样操作, 另外,怎么样从右边截取字符,就是和left()函数相反的那 ...

  5. C语言中常用的字符串操作函数

    程序开头要声明 #include <string.h> 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char ...

  6. C语言基础 (8) 常用字符串处理函数

    复习 如何调用库函数(别人写好的函数) 1)       头文件:包含指定的头文件,头文件主要包含此函数的声明 2)       函数名字:函数名字必须和头文件声明的名字一样 字符串常用处理函数: 1 ...

  7. C语言字符篇(一)字符串转换函数

      #include <stdlib.h>   double atof(const char *nptr);  将字符串转换成双精度浮点数 int atoi(const char *npt ...

  8. C语言字符篇(四)字符串查找函数

      #include <string.h>   char *strchr(const char *s, int c);   The strchr() function returns a ...

  9. C语言字符篇(三)字符串比较函数

    #include <string.h>   int strcmp(const char *s1, const char *s2); 比较字符串s1和s2 int strncmp(const ...

随机推荐

  1. [转c#]记录程序耗时的方法

    多时候需要输出程序耗时,然后记录下来, 总是在程序执行开始记录当前时间点,在结尾记录结束时间点,然后两个时间相减,   那么有没有其他稍微像样点的方法呢?  告诉你,有滴 ; )   这个方法主体就是 ...

  2. artTemplate教程

    artTemplate教程 官方文档 一个简单的例子 <!DOCTYPE html> <html lang="zh"> <head> <m ...

  3. centos7 mod_gearman 3.0.1 打包rpm

    wget https://github.com/sni/mod_gearman/archive/v3.0.1.tar.gz -O /root/rpmbuild/SOURCES/mod_gearman- ...

  4. nginx配置https服务器

    方法一 1.创建证书 #cd /usr/local/nginx/conf #openssl genrsa -des3 -out server.key 1024 #openssl req -new -k ...

  5. Python中的Numpy、SciPy、MatPlotLib安装与配置

    Python安装完Numpy,SciPy和MatplotLib后,可以成为非常犀利的科研利器.网上关于这三个库的安装都写得非常不错,但是大部分人遇到的问题并不是如何安装,而是安装好后因为配置不当,在使 ...

  6. 验证tensorflow版本是GPU还是CPU

    reference: https://blog.csdn.net/zlase/article/details/79261348 import numpy import tensorflow as tf ...

  7. SINAMICS S120 Parking axis设置,安转拆除或屏蔽电机

    1) P897 Parking axis selection 此参数可以连接到周期通讯的报文中(PZD) 2) 标准报文111中,已经连接此参数

  8. session的MaxInactiveInterval=0在tomcat6和tomcat8不同表现

    在tomcat6中调用 request.getSession().setMaxInactiveInterval(0); 这个session会立即过期. 而在tomcat8中,同样的调用,会导致这个se ...

  9. POJ - 1201 Intervals (最短路解线性规划)

    相交区间选尽量少的点是可以贪心的,右端点排序以后,尽量往右边放可以得到可以使得点在区间尽可能多. 但是我只想到了O(n)的维护方法.(数据比较水,能过... 或者是前缀和可以写sum(bi) - su ...

  10. 模拟网页的浏览Stack(POJ1028)

    题目链接:http://poj.org/problem?id=1028 注意: 1.用两个栈来模拟,一个用来存可以返回的,一个用来存可以前进的. 2.visit方法,就要将可以前进的栈清空. 3.ba ...