18515289503 发表于 2020-4-4 23:12:00

linux 中文字符输出

在做sle22课后题时,输入中文字符到字符数组,怎么输出是的都是问号。

ba21 发表于 2020-4-4 23:14:04

sle22课后题时 是什么???????
你代码是什么???????????

18515289503 发表于 2020-4-5 21:04:51

ba21 发表于 2020-4-4 23:14
sle22课后题时 是什么???????
你代码是什么???????????

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

ba21 发表于 2020-4-5 22:40:45

18515289503 发表于 2020-4-5 21:04
我的代码和输出都在附件里。做的是sle22 动动手第二个-拷贝字符串。 代码输入中文字符串到a,拷贝到字符 ...

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

int main(void)
{
        char a={'\0'}, b={'\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);
}

18515289503 发表于 2020-4-7 14:04:44

ba21 发表于 2020-4-5 22:40


多谢,我再问一下问题,你的代码我再gcc上编译出现了错误,见下图:
我找了下usr/include 文件夹,里面有stblib.h文件,问什么还会出现错误?

人造人 发表于 2020-4-7 14:08:20

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

stlib.h ?
怎么能如此的不认真?

18515289503 发表于 2020-4-7 15:57:59

人造人 发表于 2020-4-7 14:08
stlib.h ?
怎么能如此的不认真?

stlib.h是编译后系统出现的

人造人 发表于 2020-4-7 16:03:23

18515289503 发表于 2020-4-7 15:57
stlib.h是编译后系统出现的

把Ch.c的内容贴出来

18515289503 发表于 2020-4-8 12:26:36

Ch.c 用的就是楼上答案的代码,一模一样的。


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

int main(void)
{
      char a={'\0'}, b={'\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);
}
页: [1]
查看完整版本: linux 中文字符输出