首先,C语言没有向C++,Java,python等面向对象的语言中string这样的字符串类型,C语言中的字符串是存放在字符型数组中的
C语言中,常见的3种字符串赋值有如下:
1、通过字符数组直接初始化
int main()
{
char str[10] = "China";//还可以写成char str[10] ;str[10] = "China";
printf("str = %s", &str);
return 0;
}
但是,直接把数组元素赋值给数组名(也就是数组首元素的地址),是不行的
int main()
{
char str[10] ;
str = "China";
printf("str = %s", str);
return 0;
}
这样会出现编译错误:C2106(运算符的左操作数必须为左值)
2、使用strcpy函数进行初始化
int main()
{
char str1[10],str2[] = "China";
strcpy(str1, str2);//此行代码还可以写为 strcpy(str1,"China");
printf("str1 = %s", str1);
return 0;
}
这里需要注意的是,使用strcpy函数,strcpy(str1,str2),字符数组1必须定义的足够大,以便容纳被复制的字符串2,避免数组越界。
以下写法是错误的
char str1[10],str2 = "China";
str1 = str2;
注:
在C语言中,将一个字符串赋值给另一个字符串,只能使用strcpy函数
但是,可以使用赋值号实现对单个字符的赋值
如:
char str1[10];;
str1[0] = 'A';
str1[1] = 'B';
str1[2] = '\0';
这里需要注意的是,结束后一定要自行添加 ‘\0’,
否则,就会出现” AB烫烫烫烫烫烫烫 ]D痨“的编译结果
3、通过指针赋值
通过指针赋值字符串相对比较难理解,大家先看一段代码
#define _CRT_SECURE_NO_WARNINGS//在VS2019下可以加,否则会出现C4996问题
#include <stdio.h>
int main()
{
char* string = "I Love China";
printf("string = %s", string);
return 0;
}
如何理解这段代码:
①程序定义了一个char *类型的指针变量(字符指针变量)string,在C语言中,指针 = 地址,顾名思义,指针变量存放着地址
②字符串常量"I Love China",C语言在处理字符串常量是按字符数组来处理的。
③结合上两点可以知道,该字符指针存放的是字符常量第一个元素的地址
因此,输出时,只需告诉编译器字符常量首元素的地址即可
char* string = "I Love China";
还可以写为:
char * string;
string = "I Love China";//不可以写为*string = "I Love China";
不可以写为:
*string = “I Love China”;
因为,字符串常量在C语言中是按字符数组来存储的,string 存储地址
另外,在谈谈字符串的输出;
char str[10] = "China";
printf("str = %s", str);
而,整型数组的输出确是需要用到for循环