字符数组:C语言学习中较麻烦的部分,C语言中没有字符串这种类型的数组,字符串只能存储在字符型数组中。
1、定义时直接赋值
char a[10]={"I LOVE C"};//可以直接省去花括号直接写成char a[10]=''I LOVE C";
注意:此处的"I LOVE C"中空格也是占用字节的,字符数组必须要大于字符串所需要的字节,才能容纳字符串。
2、对数组中字符逐一赋值
char a[10]={"I"," ","L","O","V","E"," ","C"};//可以看出我们此处也为空格申请空间
注意:这种写法不能省略花括号的
3、strcpy函数赋值
格式:strcpy(a,b) 可以将b中字符串内容复制到a中,其实就是b的内用覆盖a的内容。
#include<stdio.h>
#include<string.h>
int main()
{
char str1[10]="I LOVE",str2[]="C";/*定义两个字符数组,并为str2赋初值*/
strcpy(str1,str2);/*调用strcpy函数*/
puts(str1);/*输出字符串1*/
return 0;
}
输出结果为C 注意:调用strcpy函数需要调用头文件string.h
char arr[10];
strcpy(a,"I LOVE C");
常见错误辨析
错误(1)
char a[10];
a[10]="I LOVE C";
错误(2)
char a[10];
a="I LOVE C";
这次变聪明了,直接赋值a,但这种写法仍是错误的,(初学甚浅,目前未接触指针,不过多解释)
char a[10]; a="I LOVE C";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的I LOVE C常量,这里的指针a出现混乱,不允许!会出现const char无法转换为char类型
补充一点 char *a; a="I LOVE C";//这种情况是正确的。因为定义时a还没有指向的空间,不存在指针指向混乱的情况
C语言的运算符根本无法操作字符串。在C语言中把字符串当作数组来处理,因此,对字符串的限制方式和对数组的一样,特别是, 它们都不能用C语言的运算符进行复制和比较操作。
典型例题
下述对C语言字符数组的描述中错误的是(?)
A.字符数组可以存放字符串
B.字符数组中的字符串可以整体输入、输出
C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.不可以用关系运算符对字符数组中的字符串进行比较
小伙伴知道选择什么吗?答案隐藏在其中,欢迎讨论,指教。
特别 strcat函数
#include<stdio.h>
#include<string.h>
int main()
{
char st1[30]="I LOVE";
char st2[10]=" C";
//gets(st2);//相当于赋值st2值,输入值
strcat(st1,st2);//区别于strcpy
puts(st1);
return 0;
}
小伙伴知道此处输出什么结果吗?仍是I LOVE C!
字符串连接函数strcat
格式:strcat (a,b);功能:把b中的字符串连接到a中字符串的后面,并删去字符串1后的串标志“\0”。
本函数返回值是a的首地址。
既然没有终点,那在何处又何妨呢。
希望对你有帮助,语言学习贵在坚持输入和输出!