# 字符串处理函数 C语言提供了丰富的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,使用这些现成的函数可以大大减轻我们的编程负担。 用于输入输出的字符串函数,例如`printf`、`puts`、`scanf`、`gets`等,使用时要包含头文件`stdio.h`,而使用其它字符串函数要包含头文件`string.h`。 `string.h`是一个专门用来处理字符串的头文件,它包含了很多字符串处理函数。需要注意的是MSVC编译器编译出现警告 > 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 需要在项目-->属性-->预处理器中加上`_CRT_SECURE_NO_WARNINGS;` 消除安全警告。当然也可以在源文件开头写上预处理器的设置。其实MSVC编译器为这些非安全函数重新编写了相对应的替代函数,比如 `strcat()` ,相应的替代函数为 `strcat_s()` 。 ```c #define _CRT_SECURE_NO_WARNINGS ``` 而GCC编译器跟MSVC不一样,不用预处理器的设置也可以顺利编译通过。 ## 字符串连接函数strcat() strcat 是 string catenate 的缩写,意思是把两个字符串拼接在一起,语法格式为: ```c strcat(arrayName1, arrayName2); //arrayName1、arrayName2 为需要拼接的字符串 ``` `strcat()` 将把 `arrayName2` 连接到 `arrayName1` 后面,并删除原来 `arrayName1` 最后的结束标志`'\0'`。这意味着,`arrayName1` 必须足够长,要能够同时容纳 `arrayName1` 和 `arrayName2`,否则会越界(超出范围)。 `strcat()` 的返回值为 `arrayName1` 的地址。 ```c #include #include #include int main(int argc, char *argv[]) { char str1[100] = "My mane is "; char str2[50]; printf("Input name: "); gets_s(str2, 50); strcat(str1, str2); puts(str1); system("pause"); return 0; } ``` ## 字符串复制函数strcpy() `strcpy` 是 string copy 的缩写,意思是字符串复制,也即将字符串从一个地方复制到另外一个地方,语法格式为: ```c strcpy(arrayName1, arrayName2); ``` `strcpy()` 会把 `arrayName2` 中的字符串拷贝到 `arrayName1` 中,字符串结束标志`'\0'`也一同拷贝。 ```c #include #include #include int main(int argc, char *argv[]) { char str1[50] = "wangyuedong"; char str2[50] = "lalalala"; strcpy(str1, str2); printf("str1: %s\n", str1); system("pause"); return 0; } ``` 另外,`strcpy()` 要求 `arrayName1` 要有足够的长度,否则不能全部装入所拷贝的字符串。 ## 字符串比较函数strcmp() strcmp 是 string compare 的缩写,意思是字符串比较,语法格式为: ```c strcmp(arrayName1, arrayName2); //arrayName1 和 arrayName2 是需要比较的两个字符串。 ``` 字符本身没有大小之分,`strcmp()` 以各个字符对应的 ASCII 码值进行比较。`strcmp()` 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。 返回值:若 `arrayName1` 和 `arrayName2` 相同,则返回0;若 `arrayName1` 大于 `arrayName2`,则返回大于 0 的值;若 `arrayName1` 小于 `arrayName2`,则返回小于0 的值。 ```c #include #include int main(){ char a[] = "aBcDeF"; char b[] = "AbCdEf"; char c[] = "aacdef"; char d[] = "aBcDeF"; printf("a VS b: %d\n", strcmp(a, b)); printf("a VS c: %d\n", strcmp(a, c)); printf("a VS d: %d\n", strcmp(a, d)); return 0; } ```