网站首页 > 教程分享 正文
字符串的处理,是计算机编程最重要的任务,没有之一。因此,字符串编程知识点的掌握,是编程学习的重要基础。
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));
}
- 上一篇: C语言字符串数组和字符串指针的区别
- 下一篇: C语言字符串和字符数组,简单了解下
猜你喜欢
- 2024-10-25 StringUtils字符串分割转数组(string字符串转化数组)
- 2024-10-25 Python的数组、元组、字符串(python 数组字符串)
- 2024-10-25 嵌入式开发-C语言-数组和字符串(c语言字符数组和字符串数组)
- 2024-10-25 c#入门教程(二)数据结构之数组(c# 数据结构)
- 2024-10-25 Java数组(java数组转成list)
- 2024-10-25 熟悉 Shell脚本 - 数组(shell数组的用法)
- 2024-10-25 JavaScript数组方法以及字符串方法的多种功能
- 2024-10-25 面试官:如何用JavaScript实现字符串数组模糊搜索?
- 2024-10-25 C语言字符数组,与字符是什么关系?
- 2024-10-25 知识分享:C语言知识干货系列——数组篇
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)