C语言字符串与字符数组的区别

C语言字符串与字符数组的区别字符串的处理 是计算机编程最重要的任务 没有之一 因此 字符串编程知识点的掌握 是编程学习的重要基础 C 中有一个标准容器 std string 相当于是 C 的字符串数据类型

大家好,欢迎来到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语言字符串的存储

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

(0)
上一篇 2025-02-07 13:33
下一篇 2025-02-07 13:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信