strcpy,strcat,strlen

来源:互联网 发布:tp 开源项目源码 编辑:程序博客网 时间:2024/05/20 19:17

1.字符串strlen()的值,是否和她占据内存空间相同?

 

 strlen()函数的返回值不包含‘/0’字符,

 所以它比他占据的空间小1(所占据的空间可用sizeof确定),

 此函数声明在<string.h>中

 他的返回值是size_t型,声明在<stddef.h>中,Typedef unsigned int size_t;

 

2.strcpy函数存在的潜在风险,如何避免?

 

  strcpy(string1,string2);将string1复制到string2中,这个复制包含'/0'。

 风险之一就是string2的长度比string1长的话,string1就不包含'/0',没有结束符号会在以后使用中带来很大的问题

 可以增加一个判断

 if(sizeof(string2)<=sizeof(string1))

strcpy(string1,string2);

else

pringtf("源字符串太长");

 

 3.不要试图输出一个没有字符串结束标志的数组,一下代码是错误的,

   char str[] = {'h', 'e', 'l', 'o'};

   printf("%s",str);

   purts(str);

由于字符数组str没有结束符'/0',printf和puts会在输出hello后,继续遍历后面的内存单元,直到遇到/0为止,这样会输出不确定的字符

 

4.strcpy(),strcat(),strcmp(),strncpy(),strncat(),内部到底是如何运行的?

 

   strcpy()是把源字符串复制到目标字符串,复制包含了终止符'/0',目标字符串原有的信息将被删除,原字符串不变

   strcat()把原字符串复制到目标变量的结尾,源字符串不变

   strcmp(string1,string2),比较两个字符串,返回一个小于,等于,大于0的值,对应string1小于;等于,大于string2;目标字符串和员字符串不变

    strncpy(string1,string2,n);把源字符串string2的前n个字符复制到string1中,此复制不包含终止符/0,源字符串不变

strncat(string1,string2,n);把源字符串string2的前n个字符复制到目标字符串string1的结尾,源字符串不变

 

 

待续添加。。。。。有错望指出

原创粉丝点击