一、字符串字面量(字符串常量)
1.字符串字面量概念
字符串字面量是指使用双引号“”括起来的的字符序列,例如:“Hello World”。
2.在C语言中,把字符串当做字符数组来处理,当遇到长度为n的字符串时,程序分配长度为n+1的数组来保存,最后一个字符表示字符串的结束’\0’.
3.根据我们知道的数组和指针的关系,可以使用字符指针来保存字符串常量,例如: char *c ;c = “Hello world”.
4.注意区分字符常量和字符串常量,例如:’a’ 和“A”,第一个是字符常量,而第二个是字符串常量。
实例
include <stdio.h>
include <string.h>
void test1(){
// 字符数组
char c[] = "Hello World!\n";
// 字符指针
char *c1 = "Hello World!\n";
printf(c);
printf(c1);
// 字符常量
char c2 = 'A';
// 字符串常量
char *c3 = "A\n";
printf("%c\n",c2);
printf(c3);
}
int main(void)
{
test1();
}
二、用字符串处理函数输入和输出
在<string.h>头文件中字符串输出函数puts
格式:puts(字符数组)
功能:向显示器输出字符串(输出完,自动换行,即用’\n’替’\0’)
说明:字符数组必须以’\0’结束
字符串输入函数gets
格式:gets(字符数组)
功能:从键盘键入以回车结束的字符串放入字符数组中,并自动加’\0’
说明:输入串长度应小于字符数组维数,字符串中可以包含空格
include<string.h>
int main()
{
char str[10];
printf("请输入字符串");
gets(str);
printf("请输出字符串");
puts(str);
system("pause");//从程序中调用pause命令
return 0;
}
三、字符串数组初始化
在C语言编程中,我们声明一个字符串数组的时候。常常把他们初始化为空串。总结起来,有以下三种方式:
(1) char str[10]="";
(2) char str[10]={'\0'};
(3) char str[10]; str[0]='\0';
第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组的第一个元素初始化为'\0'
四、字符串数组
1.如果想存储一堆字符串可以使用字符串数组,字符串数组就是二维数组
char names[5][20] = {
"zhangsan",
"lisi",
"wangwu",
}
2.字符串数组的两种形式
2.1第一种形式:二维字符数组
char arry[7][10] = {"Monday","Tuesday","Wednsday","Thurday","Friday","Saturday","Sunday"};
在栈上分配了70字节内存,字符串数组有7个元素,每个元素是10个字节的字符数组,因为数组名arry是指向数组首元素arry[0]的指针,arry[0]的类型是char [10],所以arry的类型是char (arry)[10],知道arry类型很重要,当把arry作为函数参数传递时要注意。
反过来我们可以定义char (myarry)[10] 类型的指针来指向char myarry[][10]的字符串数组,即char (myarry)[10] = arry。
2.2第二种形式:字符指针数组
char arry[] = {"chen","chun","xia","baob"};
在栈上分配了sizeof(char)4字节的内存空间,存储字符串指针。因为数组名arry是指向数组首元素arry[0]的指针,arry[0]的类型是char [10],所以arry的类型是char (arry)[10],知道arry类型很重要,当把arry作为函数参数传递时要注意
反过来我们可以定义char **myarry 类型的指针来指向一段内存空间(用malloc,char **myarry = (char **)malloc(sizeof(char)num)),用来存储字符串地址,或者将char* arry[]类型的字符串数组地址赋给它,即char **myarry = arry。
注意这两种字符串数组的数组名的类型不能混用,根本原因在于字符串数组的首元素类型不同