一、字符数组的定义
语言字符数组的定义是指在C语言中可以使用一组连续的字符来存储和处理字符串。在定义字符数组时,需要指定数组的大小,并且可以初始化数组的内容。
1、字符数组方式:
char str[] = "Hello,world!";
2、指针方式:
char *str = "Hello,world!";
注:使用字符数组定义字符串时,数组的长度应该比字符串的长度多1, 使用指针方式定义字符串时,指针变量指向了字符串常量的首地址,无需指定数组长度
代码示例:
#include <stdio.h>
#include <string.h>
int main()
{ //注:字符串的长度不算结束符'\0',但是存储空间包含结束符。
//双引号结束有'\0'的标志,单引号没有。(注:单个数组单元所占内存字节,与变量类型有关)
char d[] = "xyz";
char a[] = {'a','b','\0','c','\0'};//初始化字符数组时,建议最后一个字符以'\0'结尾。防止乱码。
char b[] = {"abcd"};//字符串初始化字符数组
char c[] = "abcde";
printf("%s\n",a);
printf("sizeof(a):%lu\n",sizeof(a));
printf("sizeof(b):%lu\n",sizeof(b));
printf("sizeof(c):%lu\n",sizeof(c));
printf("sizeof(d):%lu\n",sizeof(d));
printf("strlen(a):%lu\n",strlen(a));//字符串长度(即有多少元素,不包括'\0')
printf("strlen(b):%lu\n",strlen(b));
printf("strlen(c):%lu\n",strlen(c));
printf("strlen(d):%lu\n",strlen(d));
printf("|%c|\n",32);
return 0;
}
运行结果;
ab
sizeof(a):5
sizeof(b):5
sizeof(c):6
sizeof(d):4
strlen(a):2
strlen(b):4
strlen(c):5
strlen(d):3
| |
二、笔试难题
11、char szstr[10];
strcpy(szstr,“0123456789”);
产生什么结果?为什么?
赋值“0123456789”有11个字节的数据大小(包括'\0'),超过szstr数组内存存储空间,出现段错误。
程序报错提醒:
修改后代码;
#include <stdio.h>
#include <string.h>
int main()
{
char szstr[11];
strcpy(szstr,"0123456789");
printf("%s",szstr);
return 0;
}
运行结果;
0123456789
13、void main()
{
char aa[10];
printf(“%d”,strlen(aa));
}
会出现什么问题?打印结果是是多少?
输出结果可能为0,因为strlen()输出的是aa字符数组初始化后存储的字符数。
而sizeof()输出的是aa字符数组能够存储的最大字节数。
修改后代码示例:
#include <stdio.h>
#include <string.h>
void main()
{
char aa[10];
printf("strlen(aa) = %d\n",strlen(aa));
printf("sizeof(aa) = %d\n",sizeof(aa));
char bb[10] = "162151";
printf("strlen(bb) = %d\n",strlen(bb));
}