C语言9-字符串
1.字符串的定义
在C语言中并不像JAVA中有字符串类型,C语言中通过字符数组和一个\0结束标志来表示一个字符串,这里注意字符数组和字符串的区别就在于最后这个\0标识符
2.字符串的初始化
字符串的初始化可以直接给出字符数组的每一个值和\0结束标志,也可以单独给出字符数组中每个元素的值,当然也可以直接在字符数组后面给字符串(这种情况系统会自动给\0结束标记,并且这种情况可以不给定字符数组元素的个数,或者可以给定超出字符串中字符个数的元素个数),总而言之,字符串的初始化有五种方式
#include <stdio.h> int main(int argc, const char * argv[]) { char name[4]={'i','o','s','\0'}; //字符串初始化的第一种方式,直接给出所有的字符元素,并在结尾添加\0结尾标志 char file[5]; //第二种方式初始化字符串,单个单个的给出字符,最后一个元素的值为\0 file[0]='f'; file[1]='i'; file[2]='l'; file[3]='e'; file[4]='\0'; char a[4]="xxx"; //第三方式初始化字符串,可以直接给出字符串,系统会自动加上\0结束标志 char b[]="hehe"; //当然我们也可以不指定字符数组的元素个数 char c[100]="heihei"; //当然我们也可以这样,字符数组的元素个数超出了字符串中元素的个数 puts(file); puts(name); return 0; }
3.字符串的输出
C语言中提供了两个函数来输出字符串,一个是printf函数,一个是puts函数,它们的区别是printf函数一次性可以输出多个字符串,而puts函数只能输出一个字符串,另外puts函数可以自动换行
这里我们要了解字符串的输出,我们还要明白,字符串在内存中存储是先进后出的,所以打印先定义的字符数组,如果这个数组没有加\0结束标记,那么它会打印到下一个带有\0结束标记的字符数组
#include <stdio.h> int main(int argc, const char * argv[]) { char a[3]="cd"; char b[2]={'a','b'}; printf("%s\n",b); //由于内存中存数数据是先进后出,所以当我打印变量b时,它会将变量a的数据也打印出来,因为在字符数组b中没有结束标志\0,注意这里b是一个地址 return 0; }
4.字符串的输入
C语言中字符串的输入也提供了两个方法,一个是函数scanf,另外一个函数是gets,这个两个函数的区别在于,scanf函数可以一次性输入多个字符串,而gets一次性只能输出一个字符串
另外还有一个区别,scanf函数不能输入空格,tab,回车,而gets函数可以,还有一点,就是如果用gets函数输入字符串可能引起内存溢出问题,因为gets函数是从给定地址开始一个一个
字符输入,然后在最后加上一个\0结束标记,但是输入的字符个数超过给定的字符数组的元素个数,就会引起数据安全问题
#include <stdio.h> int main(int argc, const char * argv[]) { //说明,由于C中存储变量是先进后出的,所以数组s2在s1的下面,当我们向s1输入字符串超过它的元素个数的时候,就会将数据写入到本该是s2的空间中去 char s2[] = "hello"; char s1[2]; gets(s1); printf("s1的值为:%s\n",s1); //结果为itcast printf("s1的值为:%s\n",s2); //结果为cast,而不是hello了 return 0; }
5.字符串数组
在C语言中字符串数组用二维字符数组来表示,表示方式有三种
#include <stdio.h> int main(int argc, const char * argv[]) { char name1[2][3] = {{'t','o','m','\0'},{'j','a','y','\0'}}; char name2[2][3] = {{"tom"},{"jay"}}; char name3[2][3] = {"tom","jay"}; return 0; }
总结:本节课主要讲解了5点
1.C语言中的字符串是用字符数组加\0结束标记来表示的,C语言中并没有字符串类型
2.C语言中字符串初始化有五种方式,可以直接给出字符数组的所有元素并加上\0,可以单个单个给出字符数组中的元素,最后一个元素为\0结束标记
还可以直接给出字符串,当然这种情况系统会自动在字符数组末尾添加上\0结束标记,这种情况也可以不给出字符数组元素的个数,也可以给出字符数组元素个数,
甚至给出的元素个数可以超过字符串中字符的个数
3.C语言中字符串的输出提供了两个函数printf和puts,区别在于printf可以一次打印多个字符串,而puts只能打印一个,另外由于C语言中变量存储是先进后出,所以在
打印字符数组时,如果这个字符数组没有结束标记\0,则会从给定的地址答应到有结束标记为止
4.C语言中提供了scanf和gets两个函数用来输入字符串,这两个函数的区别在于scanf函数一次性输入多个字符串,而gets只能一次性输入一个字符串,另外scanf函数不能输入
空格,tab,回车,gets可以,还有一点gets输入字符串有可能引起安全问题,导致内存溢出
5.C语言中字符串是以二维字符数组形式表现的,我们用三种写法
——————————————————————————————————————————————————————————————————————————————————————

浙公网安备 33010602011771号