免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8147 | 回复: 10
打印 上一主题 下一主题

wchar_t 的问题,请大家帮忙... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-08 11:37 |只看该作者 |倒序浏览
在WIN上wchar_t是2个字节 Linux上是4个字节
gcc 有选项-fshort-wchar 把wchar_t 编译成2个字节

但用着怎么有问题呢?

test.cpp

#include   <stdio.h>
#include   <stdlib.h>
#include <string.h>
#include <wctype.h>
#include <wchar.h>
using namespace std ;

int  main()
{
      wchar_t   *wcs   =   L"this";
        char a_szDest[50] ;
        int count = wcstombs(a_szDest,wcs,50) ;
        printf("sizeof(wchar_t)=%d\n",sizeof(wchar_t)) ;
        printf("count=%d\n",count);
        printf("dest=%s\n",a_szDest);
        printf("%d\n",wcslen(wcs)) ;
        return 0 ;
}

1、不用选项-fshort-wchar 编译
g++ -o test test.cpp
结果:
sizeof(wchar_t)=4
count=4
dest=this
4

2、用选项编译
g++ -o test test.cpp -fshort-wchar
结果:
sizeof(wchar_t)=2
count=-1
dest=
13

现在 wcslen(wcs)) 怎么成了13

各位大虾们 快帮忙..
谢谢

[ 本帖最后由 迷離 于 2009-1-8 12:08 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-01-08 12:38 |只看该作者
还没用过wchar_t...

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
3 [报告]
发表于 2009-01-08 12:55 |只看该作者
是不是系统不支持的,导致未定义行为啊?

看count=-1
转换函数都报系统不能转换错误:
RETURN VALUE
       The  wcstombs()  function  returns the number of bytes that make up the
       converted part of multibyte sequence,  not  including  the  terminating
       null byte.  If a wide character was encountered which could not be con-
       verted, (size_t) -1 is returned.

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
4 [报告]
发表于 2009-01-08 12:58 |只看该作者
是不是应该连 -fshort-wchar 版的标准库

论坛徽章:
0
5 [报告]
发表于 2009-01-08 13:17 |只看该作者

回复 #3 yangsf5 的帖子

系统支持的,编译不加选项-fshort-wchar时输出是正确的

论坛徽章:
0
6 [报告]
发表于 2009-01-08 13:21 |只看该作者

回复 #4 hardcorn 的帖子

谢谢你的回复
不过-fshort-wchar 版的标准库有么?

论坛徽章:
0
7 [报告]
发表于 2009-01-08 17:43 |只看该作者

回复 #1 迷離 的帖子

wcslen, wcstombs这两个接口兼容的不太好吧?

我也没怎么用过wchar_t,一般gtk等图形编程里才见到这种数据结构,我以前做移植的时候干脆就直接干瞪眼用个define把wchar_t搞走了。

或者直接typedef成个2字节的,如unsigned int啥的去调,有问题再换别的,

这些事挺烦的。

论坛徽章:
0
8 [报告]
发表于 2009-01-08 17:46 |只看该作者

回复 #7 samon_fu 的帖子

我的方法不好,我那只能治标。
如果能把-fshort-wchar 这条线走通肯定是治标治本的好方法了。

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
9 [报告]
发表于 2009-01-08 18:11 |只看该作者

回复 #7 samon_fu 的帖子

我老大以前的代码,这个问题没处理,不过c/s两端的运行没出差错。
等我提出两操作系统的那个sizeof值不同时,才像你这样的给改掉了。

论坛徽章:
0
10 [报告]
发表于 2009-01-08 22:16 |只看该作者
直接用选项-fshort-wchar 把wchar_t设成2个字节可能跟标准库的wchar_t不同,这会引起问题
另外,VC的wchar_t是用的UTF-16编码,而GCC可能是用的UTF-32编码(猜的)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP