Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32813
  • 博文数量: 27
  • 博客积分: 1080
  • 博客等级: 少尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-09 10:29
文章分类

全部博文(27)

文章存档

2011年(1)

2010年(15)

2009年(11)

我的朋友

分类: C/C++

2009-12-16 20:24:32

1、 strlen()函数的返回值是什么类型的?

_CRTIMP size_t __cdecl __MINGW_NOTHROW        strlen (const char*)  __MINGW_ATTRIB_PURE;

返回strlen() size_t型。
 
2、 字符串strlen() 的值,是否和他占据的内存空间相同?

strlen()函数的返回值不包括‘\0’字符。
所以它比他占据的空间少1.(他所占据的空间可以用关键字sizeof来确定。)
此函数声明在中。
他的返回值是size_t型。 声明在中。Typedef unsigned int size_t ;

3、 你是否知道strcpy 函数存在的潜在风险?如何避免?

strcpy(string1,string2);将stirng2复制到string1中。这个复制包含’\0’。
风险之一是就是string2的长度比string1长的话,string1就不会包含’\0’。没有结束符号会在以后使用中带来很大的问题。
可以增加一个判断
if(sizeof(string2)<=sizeof(string1))
strcpy(string1,string2);
else
printf(“源字符串的长度大于要复制的字符串长度”);
 
4、 如果一个字符串没有字符串结束符,而调用str 开头的库函数,会
发生什么?
经过测试发现一个问题。
#include
#include
#include
int main()
{       
  size_t i;
  char a[7]="1234567";
  char c[14]=””;//没有空格,空格算一个字符。
  strcat(c,a);
  printf("%d",strlen(c));
  return 0;
}
这个时候输出无意义的数据(自己测试输出7,理解:strcat()函数:把
src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0')
。如果a[7]=”123456\0”,则可以输出6。
 
提示;不要试图输出一个没有字符串结束符的字符数组。下面是错误的代
码:
char str[]={'h','e','l','l','o'};
printf("%s",str);
puts(str);
由于字符数组str没有'\0',printf和puts会在输出hello以后,继续遍
历后续的内存单元,直到遇到0为止。这样的代码会导致不确定的字符输
出。
 
5、 strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()内部到底是如何运行的?这些函数到底对源字符串和目标字符串做了些什么?你是否观察过它们运行时两个字符串内存的变化?

strcpy()是把源字符串复制到目标字符串。复制包括了字符终止符’\0’。目标字符串原有的信息将被删除。源字符串不变。

strcat()把源字符串复制到目标字符串结尾。源字符串不变

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

strncpy(string1,string2,n)把源字符串string2的前n个字符,复制到sting1中,此复制不包括终止符’\0’。源字符串不变。

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

strncmp(string1,string2,n)比较两个字符串前n个字符。目标字符串和源字符串不变。 
 
6、 上面这些函数使用时,各有哪些需要注意的地方?

strcpy()和strcat() 使用时应该注意数组长度….别的暂时尚未想到

7、 你会几种字符串查找操作?

strstr()函数是在头文件中声明的。
他查找一个字符串中的子字符串。返回找到的第一个子字符串位置的指针,如果找不到匹配的字符串,就返回NULL。

 
6、 上面这些函数使用时,各有哪些需要注意的地方?

strcpy()和strcat() 使用时应该注意数组长度….别的暂时尚未想到

7、 你会几种字符串查找操作?

strstr()函数是在头文件中声明的。
他查找一个字符串中的子字符串。返回找到的第一个子字符串位置的指针,如果找不到匹配的字符串,就返回NULL。
 
9、 对字符串进行操作的时候,是否为字符串结尾符预留存储位置?不然的话容易造成非正常访问内存。  

对字符串进行操作的时候要在字符串尾部预留结束符。
                                               --------有不对希望指正
阅读(792) | 评论(0) | 转发(0) |
0

上一篇:想像五年后的你

下一篇:C字符串函数

给主人留下些什么吧!~~