c语言字符和字符串总结
在C语言中,“字符”与“字符串”之间,是有区别的。
首先,一个很明显的区别是:
“字符”,使用单引号作为定界符,而“字符串”,是使用双引号作为定界符。
从本质上来说,关键字“char”定义的也是一个整数,这个整数在内存中占据一个字节。与ASCII码表相对应。比如常用的ASCII码表的对应关系是:数字48表示字符'0';数字65表示字符'A';数字97表示字符'a'
在定义一个“字符”的时候,定界符要写成单引号。在屏幕上打印一个字符的时候,需要在printf函数中,使用“%c”这个占位符。
在屏幕上要打印一个字符串的时候,在printf函数中,使用的是“%s”这个占位符。与“字符”的“%c”这个占位符是不同的。
“字符”与“字符串”之间,除了定界符不同之外,还有一个区别是:
“字符”占据一个字节,但是“字符串”是占据多个字节。而且,在“字符串”的结尾处,自动被编译器加上了'\0'这个字符,在ASCII码中,'\0'表示的是一个空字符。
如果在定义一个字符串常量的时候,使用了单引号,程序就会报错。在定义字符串的时候,需要在变量名后面加上“中括号”,类似于定义“数组”时候的格式。
字符:
在计算机中是以整型形式存储的,当需要显示时会根据ASCII表中的对应关系显示出相应的符号或图案。单个字符表示一定是以单引号括起来。
%c %d
'\0' 表示空字符0
'0' 数字0,表示48
'A' 65
'a' 97
字符的输入:
scanf("%c",&ch);
ch = getchar();
字符的输出:
printf("%c",ch);
putchar(ch);
字符串:
有字符组成的船型结构,结束标志是 '\0'
字符串的输入:
scanf("%s",地址);
缺点:不能输入空格
字符串的输出:
printf("%s",地址)
int puts(const char *s);
功能:输出一个字符串,会在末尾自动添加一个\n
返回值:成功输出的字符个数
存在形式
1、字符数组:
char str[10] = {'a','b','c',...};
特点:由 char 类型组成的数组,要为'\0'预留位置,初始化麻烦
优点:是用的是栈内存,数据可以随意修改
2、字符串字面值:(字符串常量)
由双引号办函的若干个字符就称作字符串
优点:在末尾隐藏一个'\0'
字符串的字面值是以地址形式存在的,数据存储在代码段中,如果修改就会引起段错误
注意:他的结束标志是加在末尾的
printf("%d\n",sizeof("123123"));
注意:字符个数+1
printf("%d\n",sizeof(p));
注意:指针字节数4|8
多个一模一样的字符串字面值带代码段中只有一份
3、常用方式:
字符数组[] = "字符串字面值"
用字符串字面值给字符数组赋值
优点:
1)会自动给'\0'预留位置
2)赋值完成后,字符串会存在两份,一份在代码段,另一份在栈内存(可以修改)
单个字符的获取和打印
//单个字符的获取和打印char ch;ch=getchar();//获取字符putchar(ch);//打印字符
带回显功能,输入一个字符就直接显示,然后结束
ch=getche();//获取字符 printf("\n");//带回显功能,输入一个字符就直接显示,然后结束 putchar(ch);//打印字符
不回显,但是已经赋值
ch=getche();
scanf 可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
scanf("%s",str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
char str[5];scanf("%s",str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界 printf("%s",str);//指针越界,但是地址还是连续的
gets 可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
gets(str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界printf("%s",str);//正常打印
fgets
fgets(str,6,stdin);printf("%s",str);
总体代码如下:
#include int main()
{ //test01();test02();return 0;
} void test01(void)
{//单个字符的获取和打印char ch;ch=getchar();//获取字符putchar(ch);//打印字符 ch=getche();//获取字符 printf("\n");//带回显功能,输入一个字符就直接显示,然后结束 putchar(ch);//打印字符ch=getche();//不回显,但是已经赋值
}
void test02(void)
{char str[5];scanf("%s",str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界 printf("%s",str);//指针越界,但是地址还是连续的 scanf("%5s",str);//限制只获取5个字符长度 //getchar();//拿走一个字符 printf("%s",str);//正常打印 gets(str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界printf("%s",str);//正常打印gets(str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界printf("%s",str);fgets(str,6,stdin);printf("%s",str);
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
