目录
strcmp(字符串1或者字符数组,字符数串2或者字符数组)
C语言中的基本数据类型中是没有字符串这个类型的。C语言中的字符串是一个特殊的数据类型,用于存储字符数据。它们被定义为以NULL字符('\0')结尾的字符数组。因此,可以使用char数组来表示字符串。字符串可以用双引号括起来,也可以用单引号括起来。
在C语言中对于字符串的处理,一般是靠字符串相关的函数来进行的。这一类的处理函数有很多。
创建存储空间
可以通过数组(char name[10])来分配存储空间,也可以通过C语言动态内存分配函数来动态分配存储空间。
char *name;
scanf("%s", name);
如果通过上面的代码来创建存储空间,可能会通过编译器,但是在读入name的时候,name会覆盖程序中的数据和代码,并可能导致程序异常终止。这个是 因为scanf()把信息复制到由name指定的地址中,而在这种情况下,参数是个 未被初始化的指针,name可能指向任何地方。
字符串输入
如果想把一个字符串读取到程序中,必须首先预留存储字符串的空间,然后使用输入函数来获取这个字符串,C库提供了三个读取字符串的函数:scanf()、gets()和fgets()。
gets()函数
gets()(get string)函数对于交互式程序非常方便,它从系统的标准输入设备(通常是键盘)获得一个字符串。因为字符串没有预定的长度,所以gets()函数通过判断遇到的第一个换行符(\n)结束输入,按回车键可以产生这个字符。它读取换行符之前(不包括换行符)的所有字符,并在这些字符后添加一个空字符(\0)。
[clef@rhel6164 c]$ cat test1.c
#include<stdio.h>
#define MAX 81
int main(void)
{
char name[MAX];
char *ptr; //指向char的指针
printf("Please input your name.\n");
ptr = gets(name); //使用一个地址吧字符串赋值给name
//gets()函数使用return关键字返回字符串的地址
printf("name, %s\n", name);
printf("ptr, %s\n", ptr);
return 0;
}
运行结果
[clef@rhel6164 c]$ gcc test1.c
/tmp/ccDJ9AHw.o: In function `main':
//因为gets()函数不检查存储区是否能够容纳实际输入的数据,可以用后面的fgets()函数替换gets()函数
test1.c:(.text+0x1a): warning: the `gets' function is dangerous and should not be used.
[clef@rhel6164 c]$ ./a.outPlease input your name.clefname, clef
//这里ptr和name的内容是一样的ptr, clef
如果在gets()函数在读取字符串时 出错或者遇到文件结尾,它就返回一个空(或0)地址,这个空地址被称为 空指针,并且stdio.h里面定义的常量 NULL来表示,可以用下面的代码来进行一些错误检测。
while(get(name) != NULL)
也可以通过 getchar函数来完成上面的错误检测。
while((ch = getchar()) != EOF)
注意:空指针和空字符是不一样的,不要混淆。空指针是一个地址,而空字符是一个char类型的数据对象其值为0,数字上都可以用0表示,但是概念不同:NULL是一个指针,而0是一个char类型的常量。
fgets()函数
因为gets()函数不会检查存储区是否能够容纳实际输入的数据,多出来的字符简单地溢出到相邻的内存区,所以上面的代码在编译的时候会有warning。fgets()函数和gets()函数的不同:
它需要第二个参数来说明最大读入字符数。如果这个参数值为n,fgets()就会读取最多n-1个字符或者读完一个换行符为止(因为会自动添加一个空字符(\n)),由这两者中最先满足的那个结束输入。
如果fgets()读取到换行符,就会把它存到字符串里,而不是像gets()那样丢弃。
它还需要第三个参数来说明读哪一个文件,从键盘上读取数据时,可以使用stdin(代表standard input)作为参数,这个标识符在stdio.h中定义。
[clef@rhel6164 c]$ cat test1.c

本文介绍了C语言中处理字符串的基础知识,包括使用gets()、scanf()、puts()、fputs()、printf()等函数进行字符串输入输出。还详细讲解了字符串连接、复制、比较、长度计算以及大小写转换的函数,如strcat()、strcpy()、strcmp()、strlen()、strlwr()和strupr()。

12万+

被折叠的 条评论
为什么被折叠?



