c风格字符串的标准库函数

c风格字符串的标准库函数

传递给这些标准库函数例程的指针必须具有非零值,并且指向以null结束的字符数组中的第一个元素。其中一些标准库函数会修改传递给它的字符串,这些函数将假定它们所修改的字符串具有足够大的空间接收本函数新生产的字符,程序员必须确保目标字符串足够大。

头文件是<string>

strlen( s )          返回s的长度,不包含字符串结束符null

注意:strlen总是假定其参数字符串以null字符结束。当调用该标准库函数时,系统将会从实参s指向的内存空间开始一直搜索结束符,直到恰好遇到null为止。strlen返回这一段内存空间中总共有几个字符。

strcmp( s1, s2 )       比较两个字符串s1和s2是否相同。若s1与s2相等,则返回0;若s1大于s2,返回正数。若s1小于s2,则返回负数

注意:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止

strcat( s1, s2 )         将字符串s1连接到s2后面,并返回s1

strcpy( s1, s2 )        将字符串s2复制给s1,并返回s1

strncat( s1, s2, n )       将字符串s2的前n个字符串连接到s1后面,并返回s1

strncpy( s1, s2, n )      将s2的前4个字符串复制到s1,并返回s1

 注:复制的时候,要保证s1足够大,能容纳下。

   使用标准库函数strncat和strncpy的诀窍在于可以适当地控制复制字符的个数。特别是在复制和串连字符串,一定要时刻记住算上结束符null。在定义字符串时要切记预留存放null字符的空间。

例:

char str_1[20] = "123456789";
char *str_2 = "abcdefgh";

cout << "strlen( str_1 )===================" << strlen( str_1 ) << endl;            
char str_1_1[20] = "123456789";
cout << "strcmp( str_1, str_2 )============" << strcmp( str_1_1, str_2 ) << endl;    
char str_1_2[20] = "123456789";
cout << "strcat( str_1, str_2 )============" << strcat( str_1_2, str_2 ) << endl;    
char str_1_3[20] = "123456789";
cout << "strcpy( str_1, str_2 )============" << strcpy( str_1_3, str_2 ) << endl;    
char str_1_4[20] = "123456789";
cout << "strncat( str_1, str_2, 4 )========" << strncat( str_1_4, str_2, 5 ) << endl;
char str_1_5[20] = "123456789";
cout << "strncpy( str_1, str_2, 4 )========" << strncpy( str_1_5, str_2, 5 ) << endl;

运行结果:

 

注:今天在vs上运行的时候出了这样的问题

报错内容:This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

解决办法:右键点击工程-------》选择“属性” 。如图:

点击“预处理器定义”后面的框,选择“编辑”。在里面输入“_CRT_SECURE_NO_WARNINGS”。如图:

点击一系列确定后。关闭vs再打开就可以编译运行了。

 

posted @ 2016-01-28 19:02  色色先生  阅读(359)  评论(0编辑  收藏  举报