课后题-指针与数组动动手0-进阶要求
本帖最后由 2220201979 于 2022-9-9 20:00 编辑用以下代码做个实验:
#include <stdio.h>
int main()
{
char str[] = "中";
int length, i;
length = sizeof(str) / sizeof(str);
printf("length of str: %d\n", length);
for (i = 0; i < length; i++)
{
printf("str[%d] = %d\n", i, str);
}
return 0;
}
一个汉字字符不是占两个字节么?
最后这句话:不难发现,每个中文字符在我们的系统中是占用 4 个字节的存储空间,并且都是负数。以此规律,我们只要检测一个字符对应的整型值是否为负数,如果是(中文字符),则将指针往后移动两个字节。
按照答案的说法,不应该把指针往后移动四个字节么 linux使用utf-8编码,中文占3个字节,再加上'\0'就是4个字节
windows使用gbk编码,中文占2个字节,再加上'\0'就是3个字节 课后题写错了,输出4说明一个中文字符占3个字节
输出3说明一个中文字符占2个字节
人造人 发表于 2022-9-9 18:10
课后题写错了,输出4说明一个中文字符占3个字节
输出3说明一个中文字符占2个字节
那指针为什么要往后移2个字节而不是三个字节呢? 临时号 发表于 2022-9-9 18:09
linux使用utf-8编码,中文占3个字节,再加上'\0'就是4个字节
windows使用gbk编码,中文占2个字节,再加上'\0' ...
那指针不应该向后移动3个字节么,为什么答案是两个字节 2220201979 发表于 2022-9-9 18:13
那指针为什么要往后移2个字节而不是三个字节呢?
什么? 人造人 发表于 2022-9-9 18:20
什么?
不难发现,每个中文字符在我们的系统中是占用 4 个字节的存储空间,并且都是负数。以此规律,我们只要检测一个字符对应的整型值是否为负数,如果是(中文字符),则将指针往后移动两个字节。
第一张图片上面还有一行字 2220201979 发表于 2022-9-9 19:38
第一张图片上面还有一行字
这代码里面哪有什么指针后移两个字节?
人造人 发表于 2022-9-9 19:47
这代码里面哪有什么指针后移两个字节?
请自行观察你当前系统对中文字符的处理方式,并设计一个可以统计中文字符以及中英文混合字符的程序。
#include <stdio.h>
#define MAX 1024
int main()
{
char str;
char *target = str;
char ch;
int length = 0;
printf("请输入一个字符串:");
fgets(str, MAX, stdin);
while (1)
{
ch = *target++;
if (ch == '\0')
{
break;
}
if ((int)ch < 0)
{
target += 2;这里加二
}
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}这个题的完整代码是这样的,之前的那个是小甲鱼做的一个实验
可以参考链接https://fishc.com.cn/forum.php?mod=viewthread&tid=72205&extra=page%3D1%26filter%3Dtypeid%26typeid%3D570 2220201979 发表于 2022-9-9 19:58
请自行观察你当前系统对中文字符的处理方式,并设计一个可以统计中文字符以及中英文混合字符的程序。
这 ...
target是加了2
但是17行还加了1,17行加的1次就不算了?
2220201979 发表于 2022-9-9 19:58
请自行观察你当前系统对中文字符的处理方式,并设计一个可以统计中文字符以及中英文混合字符的程序。
这 ...
17行加了1次
24行加了2次
一共是3次 2220201979 发表于 2022-9-9 19:58
请自行观察你当前系统对中文字符的处理方式,并设计一个可以统计中文字符以及中英文混合字符的程序。
这 ...
你的这代码只能在使用了utf-8的机器上才能运行
页:
[1]