鱼C论坛

 找回密码
 立即注册
查看: 827|回复: 8

[已解决]linux 中文字符输出

[复制链接]
发表于 2020-4-4 23:12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在做sle22课后题时,输入中文字符到字符数组,怎么输出是的都是问号。
最佳答案
2020-4-5 22:40:45
18515289503 发表于 2020-4-5 21:04
我的代码和输出都在附件里。做的是sle22 动动手第二个-拷贝字符串。 代码输入中文字符串到a,拷贝到字符 ...

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void)
  4. {
  5.         char a[30]={'\0'}, b[30]={'\0'};
  6.         char *pa=a, *pb=b;
  7.         int c;
  8.         char ch;
  9.         int chsLen;
  10.        
  11.         // 判断当前系统环境中文编码点用字节数
  12.         printf("当前环境中文编码占字节数为:%d\n", sizeof("财")-1); // -1 减\0

  13.         printf("输入:");
  14.         fgets(a, 30, stdin);

  15.         printf("复制数量:");
  16.         scanf("%d", &c);

  17.         while(c--)
  18.         {
  19.                 ch=*pb++=*pa++;

  20.                 if(ch=='\0')
  21.                         break;

  22.                 // 根据中文编码内存占用大小,再次复制剩佘字节
  23.                 if((int)ch<0)
  24.                 {
  25.                         chsLen=sizeof("财")-1;
  26.                         while(--chsLen)
  27.                         {
  28.                                 *pb++=*pa++;
  29.                         }
  30.                 }
  31.         }
  32.         *pb='\0';

  33.         printf("结果:%s\n", b);
  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-4 23:14:04 | 显示全部楼层
sle22课后题时 是什么???????
你代码是什么???????????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-5 21:04:51 | 显示全部楼层
ba21 发表于 2020-4-4 23:14
sle22课后题时 是什么???????
你代码是什么???????????

我的代码和输出都在附件里。做的是sle22 动动手第二个-拷贝字符串。 代码输入中文字符串到a,拷贝到字符串b, 但是输出是问号,输出不了中文。

输出是问号

输出是问号

代码1

代码1

代码2

代码2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-5 22:40:45 | 显示全部楼层    本楼为最佳答案   
18515289503 发表于 2020-4-5 21:04
我的代码和输出都在附件里。做的是sle22 动动手第二个-拷贝字符串。 代码输入中文字符串到a,拷贝到字符 ...

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void)
  4. {
  5.         char a[30]={'\0'}, b[30]={'\0'};
  6.         char *pa=a, *pb=b;
  7.         int c;
  8.         char ch;
  9.         int chsLen;
  10.        
  11.         // 判断当前系统环境中文编码点用字节数
  12.         printf("当前环境中文编码占字节数为:%d\n", sizeof("财")-1); // -1 减\0

  13.         printf("输入:");
  14.         fgets(a, 30, stdin);

  15.         printf("复制数量:");
  16.         scanf("%d", &c);

  17.         while(c--)
  18.         {
  19.                 ch=*pb++=*pa++;

  20.                 if(ch=='\0')
  21.                         break;

  22.                 // 根据中文编码内存占用大小,再次复制剩佘字节
  23.                 if((int)ch<0)
  24.                 {
  25.                         chsLen=sizeof("财")-1;
  26.                         while(--chsLen)
  27.                         {
  28.                                 *pb++=*pa++;
  29.                         }
  30.                 }
  31.         }
  32.         *pb='\0';

  33.         printf("结果:%s\n", b);
  34. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-7 14:04:44 | 显示全部楼层

多谢,我再问一下问题,你的代码我再gcc上编译出现了错误,见下图:
我找了下usr/include 文件夹,里面有stblib.h文件,问什么还会出现错误?
错误.png
include.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 14:08:20 | 显示全部楼层
18515289503 发表于 2020-4-7 14:04
多谢,我再问一下问题,你的代码我再gcc上编译出现了错误,见下图:
我找了下usr/include 文件夹,里面 ...

stlib.h ?
怎么能如此的不认真?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-7 15:57:59 | 显示全部楼层
人造人 发表于 2020-4-7 14:08
stlib.h ?
怎么能如此的不认真?

stlib.h是编译后系统出现的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-7 16:03:23 | 显示全部楼层
18515289503 发表于 2020-4-7 15:57
stlib.h是编译后系统出现的

把Ch.c的内容贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 12:26:36 | 显示全部楼层
Ch.c 用的就是楼上答案的代码,一模一样的。


#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char a[30]={'\0'}, b[30]={'\0'};
        char *pa=a, *pb=b;
        int c;
        char ch;
        int chsLen;
        
        // 判断当前系统环境中文编码点用字节数
        printf("当前环境中文编码占字节数为:%d\n", sizeof("财")-1); // -1 减\0

        printf("输入:");
        fgets(a, 30, stdin);

        printf("复制数量:");
        scanf("%d", &c);

        while(c--)
        {
                ch=*pb++=*pa++;

                if(ch=='\0')
                        break;

                // 根据中文编码内存占用大小,再次复制剩佘字节
                if((int)ch<0)
                {
                        chsLen=sizeof("财")-1;
                        while(--chsLen)
                        {
                                *pb++=*pa++;
                        }
                }
        }
        *pb='\0';

        printf("结果:%s\n", b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-2 00:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表