首先,在c语言中,在c、Java、python等面向对象语言中没有像string这样的字符串类型,c语言的字符串存储在字符类型数组中
在c语言中,常见的三个字符串赋值如下:
1、用字符数组直接初始化
int main () {char str[10]='China '; char str[10]; str[10]='China '; printf(str=%s )、str ); 返回0; } 但是,直接把数组元素赋值给数组名(也就是数组首元素的地址),是不行的
int main () charstr ) ) 10; str='China '; printf(str=%s )、str ); 返回0; }这样会发生编译错误。 C2106 (运算符的左操作数必须为左值) ) ) ) )。
2、使用strcpy函数初始化
int main () charstr1(10 ),str2)='China ); strcpy(str1、str2; //此行的代码也可以写为strcpy(str1,' China ' )。 printf(str1=%s )、str1); 返回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]=' '; 这里必须注意的是,结束后一定要自行添加 ‘ ’
否则,就会出现“AB烫发”“d结核”的编译结果
3、用指针赋值
因为用指针分配字符串比较难理解,所以先看看代码吧
# define _ CRT _ secure _ no _ warnings//可以在VS2019中添加。 否则,就会出现C4996的问题。 # include stdio.hint main ({ char * string=' I love ) } printf(string=%s )、string ); 返回0; }如何理解此代码:
程序定义了char *型指针变量(字符指针变量) string。 c语言中指针=地址,正如名字所示,指针变量中保存有地址
字符串常数' I Love China ',c语言将字符串常数作为字符数组处理。
组合以上两点可知,该字符指针保存了字符常数的第一个元素的地址
因此,在输出时,只要向编译器告知字符常数开头要素的地址即可
char* string='I Love China '; 也可以写如下。
char *字符串; string='I Love China '; *string='I Love China ';不可以写为:
*string=“I Love China”
这是因为字符串常量在c语言中按字符数组存储,而string存储地址
另外,我们在谈论字符串的输出;
char str[10]='China '; printf(str=%s )、str ); 整数数组的输出需要for循环