字符串就是字符数组,可以定义一个char类型的数组来存储字符串。
如果要存储多个字符串则可以定义一个char类型的二维数组。
存储多个汉字字符串的话,可以考虑用char类型的二维数组。
不过要注意,**一个汉字在内存中占用的字节数确实大于一个字符,**具体是多少取决与编码格式。
UTF-8 编码:3个字节
GBK 编码: 2个字节
在定义存储汉字的字符串的数组时要注意留足空间,不然会报错,就像这段代码:
cs
#include <stdio.h>
#include <math.h>
int main()
{
int num, i, len;
int wei[9]; // 数字的每一位存储在这里
char wei_str[][6] = {"个", "十", "百", "千", "万", "十万", "百万", "千万", "亿"};
printf("请输入一个整数:");
scanf("%d", &num);
// 计算数字的位数
i = num;
len = 0;
while (i)
{
len++;
i /= 10;
}
printf("该数为%d位数\n",len);
// 处理并打印每一位数字及其对应的位数
for (int j = 0; j < len; j++)
{
wei[j] = (int)(num / pow(10, j)) % 10; // 获取每一位
printf("%s位是%d\n",wei_str[j],wei[j]);
}
return 0;
}
错误如下: initializer-string for array of chars is too long [-fpermissive]
定义的字符数组的初始化字符串超出了数组的容量。


在这里"十万", "百万", "千万",在UTF-8编码下是6个字节,加上'\0'则需要7个字节。所以解决这个报错的方法就是将二维数组的第二个维度定义为7。如下:

而且二维数组的第二个维度必须定义,如果不想定义,可以考虑用另一种方式,用字符指针。如下:

并建议加上const表示是字符串常量,其他操作与二维数组一样。如下:
cs
#include <stdio.h>
#include <math.h>
int main()
{
int num, i, len;
int wei[9]; // 数字的每一位存储在这里
const char *wei_str[] = {"个", "十", "百", "千", "万", "十万", "百万", "千万", "亿"};
printf("请输入一个整数:");
scanf("%d", &num);
// 计算数字的位数
i = num;
len = 0;
while (i)
{
len++;
i /= 10;
}
printf("该数为%d位数\n",len);
// 处理并打印每一位数字及其对应的位数
for (int j = 0; j < len; j++)
{
wei[j] = (int)(num / pow(10, j)) % 10; // 获取每一位
printf("%s位是%d\n",wei_str[j],wei[j]);
}
return 0;
}