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) |