1.在c 语言中,将字符串作为字符数组来处理,即字符数组<==>字符串。
2.首先,不论是局部,静态还是全局数组都必须在定义的时候初始化,否则就得通过其他方式,eg 循环操作,字符串处理函数strcpy()
下面通过在VS2019中运行程序来体现:
#include <iostream>
using namespace std;
int main()
{
int i1, i2;
cout << "**********字符数组-字符串**********\n\n";
char a01[6]={ 'h','e','l','l','o' };
char a01a[6] = "hello";
i1 = sizeof(a01);
//静态初始化字符数组长度时,要大于等于字符元素个数加一
//如果定义的长度刚好等于字符个数时,逐个字符赋值情形下会输出乱码,定义的长度增加后系统自动在末尾(未被赋值的空间)填充'\0'这样输出就不会乱码;
//如果定义的长度刚好等于字符个数时,直接赋值一个字符串情形会报错
printf("a01的长度=%d\n", i1);
printf("方法一:声明并静态初始化(逐个字符赋值) a01 = %s\n",a01);
printf("方法一:声明并静态初始化(直接赋值一个字符串)a01a = %s\n", a01a);
cout << '\n';
char a02[] = { 'h','e','l','l','o','\0'};//动态初始化且逐个字符赋值时在末尾必须加'\0'字符,否则会输出乱码。
printf("方法二:声明并动态初始化(逐个字符赋值)a02 = %s\n", a02);
char a02a[] = "hello";//动态初始化且直接赋值一个字符串时在字符串末尾由系统自动加上一个'\0'
i2 = sizeof(a01);
//动态初始化未指定字符数组长度时,逐个字符赋值的字符数组长度要算上末尾的'0'
//动态初始化未指定字符数组长度时,直接赋值一个字符串由于系统自动在末尾加上一个'\0',所以也要计算在内
printf("a02的长度=%d\n", i2);
printf("方法二:声明并动态初始化(直接赋值一个字符串)a02a = %s\n", a02a);
cout << '\n';
cout << "**********字符串指针-字符串**********\n\n";//不适用于C++环境,需要修改项目-属性-C/C++-语言-符合模式-修改为“否”,才不会报错
char *a03= "hello";
printf("使用字符串指针声明并初始化一个字符串 a03 = %s\n", a03);
char *a04;
a04 = "hello";
printf("使用字符串指针先声明后初始化一个字符串 a04 = %s\n", a04);
cout << '\n';
cout << "********** 字符串指针数组 **********\n\n";
cout << "方法一:声明+定义\n";
char *a05[5] = { "hello","nihao","good","ok","bye" };//方法一:声明+定义。长度5可以不指定
int i = 0;
for (i = 0; i < 5; i++)
printf("a05[%d] = %s ,", i, a05[i]);//字符串数组的输出方式
cout << "\n方法二:先声明后逐个定义字符串\n";
char* a06[5];//方法二:先声明,再逐个定义,此时字符串指针数组长度5不能省略,必须指定。
a06[0] = "hello";
a06[1] = "nihao";
a06[2] = "good";
a06[3] = "ok";
a06[4] = "bye";
for (i = 0; i < 5; i++)
printf("a06[%d] = %s , ", i, a06[i]);
cout << "\nThis is my first C++ program";
return 0;
}
注意:不能使用下面的赋值方式:
情形一:
char str[20];
str = "I am happy";
情形二:
char str[];//单独声明时必须指定长度
str[0]='a';
Done