首先,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
int main() {
char* string = "I Love China"; printf("string = %s", string); return 0; }
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循环
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/200007.html原文链接:https://javaforall.net
