屋子很大 发表于 2021-11-3 18:59:16

作业《指针和数组》动动手第1题答案有问题

带你学c带你飞   指针和数组课后作业 动动手第1题,答案错了吗
我输入的是取2个字符,结果。。。(中文字符)
反正就是中文字符会多截取一个

傻眼貓咪 发表于 2021-11-3 19:07:33

中文字符是宽字符wchar(一般占2个字节)

屋子很大 发表于 2021-11-3 19:11:07

傻眼貓咪 发表于 2021-11-3 19:07
中文字符是宽字符wchar(一般占2个字节)

可是答案没有正确截取呀,我也不知道怎么改

jackz007 发表于 2021-11-3 19:58:08

本帖最后由 jackz007 于 2021-11-3 20:00 编辑

       中文字符在 Windows 下缺省使用 "GBK" 编码,每个汉字占用 2 个字节,在 Linux 系统下缺省使用 "UTF-8" 编码,每个汉字占用 3 个字节,明白了这些,有助于搞清楚问题所在。
       最好能贴出你的 C 代码,并给出输入、输出的样例,这样,大家可以帮助你分析问题所在。

屋子很大 发表于 2021-11-3 23:04:06

#include <stdio.h>

#define MAX 1024

int main()
{
      char str1;
      char str2;

      char *target1 = str1;
      char *target2 = str2;

      char ch;
      int n;

      printf("请输入一个字符串到 str1 中:");
      fgets(str1, MAX, stdin);

      printf("请输入需要拷贝的字符个数:");
      scanf("%d", &n);

      printf("开始拷贝 str1 的内容到 str2 中...\n");
      while (n--)
      {
               ch = *target2++ = *target1++;
               if (ch == '\0')
               {
                     break;
               }
               if ((int)ch < 0)
               {
                     *target2++ = *target1++;
                     *target2++ = *target1++;
               }
      }

      *target2 = '\0';

      printf("拷贝完毕!\n");
      printf("现在,str2 中的内容是:%s\n", str2);

      return 0;
}
这是代码

屋子很大 发表于 2021-11-3 23:16:40

jackz007 发表于 2021-11-3 19:58
中文字符在 Windows 下缺省使用 "GBK" 编码,每个汉字占用 2 个字节,在 Linux 系统下缺省使用 "UTF ...

我已经懂了,小甲鱼用的linux而我是wendous,所以它多加了*target2++ = *target1++;;;;
谢谢谢谢谢
页: [1]
查看完整版本: 作业《指针和数组》动动手第1题答案有问题