大家好,欢迎来到IT知识分享网。
字符串的处理,是计算机编程最重要的任务,没有之一。因此,字符串编程知识点的掌握,是编程学习的重要基础。
C++中有一个标准容器std::string,相当于是C++的字符串数据类型。而C语言中,基础变量类型有int , char , float ,double, bool 等,但是并没有字符串这个类型,C语言的字符串还有没有必要学习呢?先说答案是:很有必要! 因为C语言字符串的知识点,在C++编程中、可执行文件的命令行参数等,是无法绕过去的坎,必须要掌握!有鉴于此,重新拾起C语言字符串知识点,温习一下,顺便分享出来。
一、C语言字符串的定义
区别于C++的字符串,C语言的字符串又称为“C风格字符串”,即c_string,它有两个特点:
1、都有一条尾巴:’\0’, 即ASCII字符Null。
2、用字符串数组存储。
示例代码:
void AboutString() { printf("What is C style string?\n"); printf("\t C string is stored in char array, ended up with \\0. \n "); char ch[10] = {'H','e','l','l','o','\0'}; printf("\t Your string is \"%s\"\n", ch); printf("\t The array that stored the string \"%s\" occupies %d bytes in memory.\n", ch,sizeof(ch)); //从数组名获取数组占用内存大小 printf("\t There %d characters in string \"%s\".\n", strlen(ch),ch); }
程序输出:
What is C style string?
C string is stored in char array, ended up with \0.
Your string is “Hello”
The array that stored the string “Hello” occupies 10 bytes in memory.
There 5 characters in string “Hello”.
二、C语言字符串的存储
C语言字符串存储在字符数组中,数组的大小最少要比字符串中字符数大1,否则会报错,这个多出来的一个字节,用来存储ASCII字符Null, 即 ‘\0’.
在前面的例子中,建立了一个10字节大小的字符串数组,存储了字符串“Hello”,后面紧跟一个’\0′, 一共存储了6个字符在数组中。
三、C语言字符串的输入输出
有两类库函数可以使用,一是格式化的输入输出库函数scanf() / printf(), 一是 gets() / puts() 库函数。
看代码范例,如何从键盘输入姓名。英文的姓名一般包括两部分 firstName + lastName, firstName是名字,lastName是姓氏,如Microsoft公司创始人 Bill Gates。
输入字符串,在C语言中有2个坑需要避免。
(1)第1个坑是输入字符串遇到“断章取义”。采用scanf()输入字符串时,遇到空格就会停止读取,后面的字符就会被丢弃。
(2)第2坑是输入字符串时遇到“木马屠城”。scanf()语句遇到空格就完活了,后面的字符会被下一条输入语句当成它的输入而读取并且返回,接收不到正确的输入。
void GetName() { char name[30]; printf("Input your name: "); scanf("%s",name); //read a c_string until Blank or Enter, leave Enter or Blank in buffer printf("\n Hello %s\n",name); while(getchar() != '\n') { }; //flush the input buffer by reading and discarding printf("Input your name again: "); gets(name); //read c_string, including blank inside printf("Hello %s , your name has %d characters.",name,strlen(name)); }
程序的输出:
Input your name: Bill Gates
Hello Bill
Input your name again: Bill Gates
Hello Bill Gates , your name has 10 characters.
代码中的 while(getchar() != ‘\n’) { }语句,其作用就相当于flush, 清除缓冲区,让后续的gets()语句可以重新接收来自键盘的输入。
四、C语言字符串与字符数组的区别
字符串只是字符串,而字符数组是字符数组,二者并不是一回事,虽然就像鱼儿离不开水,但是鱼儿不是水,水也不是鱼儿。
字符串在数组的存储,一定会添加一个’\0’,字符串只占据字符数组一部分的空间,而且是从头开始的连续存储空间。
每一个字符串,都需要一个字符数组来存储,但字符数组存储的字符可以不是字符串。字符数组占用的存储空间大小,以及字符串中的字符个数,可以用库函数sizeof(arrayName)/sizeof(arrayName[0])和strlen()算出来,这在第一部分的代码中就给出示例。
【结束语】
本文温习了C语言的字符串相关知识点,并且给出了相关代码配合讲解。‘\0’让C拥有了“字符串”数据类型。
后续继续分享C语言字符串有关知识点,且看代码:
void stringPointer() { char charArr1[10] = "12345"; char charArr2[10] ="12345\n"; printf("string1: %s, strlen(Arr1) = %d, string2: %s, strlen(Arr2) = %d",charArr1,strlen(charArr1),charArr2,strlen(charArr2)); }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/169396.html