首先,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循环

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐