| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 575 人关注过本帖
标题:求助:此段代码如何改成函数调用?
只看楼主 加入收藏
pyf_3721
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2013-3-10
结帖率:100%
收藏
 问题点数:0 回复次数:5 
求助:此段代码如何改成函数调用?
            char *gbk = menu[i];
            uint32_t gbk_len = strlen(gbk);
            uint32_t utf8buffer_len = gbk_len * 3 + 1;
            char *utf8buffer = (char *)malloc(utf8buffer_len);
            memset(utf8buffer, 0, utf8buffer_len);
            gbk_to_utf8(gbk, gbk_len, &utf8buffer, &utf8buffer_len);
            strcpy(menu[i], utf8buffer);
            free(utf8buffer);

以上代码要改成函数调用。其中menu[i]是字符串作为参数调入,最后函数调用后返回的值为字符串menu[i],应如何改,函数应如何写,调用语句应如何写!!!
搜索更多相关主题的帖子: 如何 
2013-03-15 19:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
你上课睡觉了吧?!
void yourfunctionname( char* gbk )
{
            // char *gbk = menu[i];
            uint32_t gbk_len = strlen(gbk);
            uint32_t utf8buffer_len = gbk_len * 3 + 1;
            char *utf8buffer = (char *)malloc(utf8buffer_len);
            memset(utf8buffer, 0, utf8buffer_len);
            gbk_to_utf8(gbk, gbk_len, &utf8buffer, &utf8buffer_len);
            strcpy(gbk, utf8buffer); // strcpy(menu[i], utf8buffer);
            free(utf8buffer);
}

不过,你的代码有几个问题
a. strlen 的返回值类型不是 uint32_t,而是 size_t
b. malloc前不应该加(char *),对于C这是一种冗余错误,虽然不属于语法错误。
c. memset是否有必要?
d. 最重要的一点是,strcpy(menu[i], utf8buffer) 能保证不溢出吗?
2013-03-16 08:38
pyf_3721
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2013-3-10
收藏
得分:0 
以下是引用rjsp在2013-3-16 08:38:04的发言:

你上课睡觉了吧?!
void yourfunctionname( char* gbk )
{
            // char *gbk = menu;
            uint32_t gbk_len = strlen(gbk);
            uint32_t utf8buffer_len = gbk_len * 3 + 1;
            char *utf8buffer = (char *)malloc(utf8buffer_len);
            memset(utf8buffer, 0, utf8buffer_len);
            gbk_to_utf8(gbk, gbk_len, &utf8buffer, &utf8buffer_len);
            strcpy(gbk, utf8buffer); // strcpy(menu, utf8buffer);
            free(utf8buffer);
}

不过,你的代码有几个问题
a. strlen 的返回值类型不是 uint32_t,而是 size_t
b. malloc前不应该加(char *),对于C这是一种冗余错误,虽然不属于语法错误。
c. memset是否有必要?
d. 最重要的一点是,strcpy(menu, utf8buffer) 能保证不溢出吗?
谢谢!这是我提的问题得到的第一个正确回答,同时谢谢你提出的错误。
1、strlen要如何才能是uint32_t?
2、strcpy(gbk, utf8buffer)要如何才能保证不溢出?我的原意是将utf8buffer字串返回给参数gbk,不用strcpy的话应如何修改才能保证不溢出?
3、溢出后有什么后果?
谢谢!请您抽空再回答一下!
2013-03-16 09:12
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
我是初学者,不知这样是否可以?
1.uint32_t gbk_len = (uint32_t)strlen(gbk);
2.strcpy会溢出,所以记得.Net改了这指令(好几个),VC6转到就.Net会碰到
errno_t strcpy_s(
   char *strDestination,
   size_t sizeInBytes,
   const char *strSource
);
3.没遇过

不要選我當版主
2013-03-16 15:50
pyf_3721
Rank: 1
等 级:新手上路
帖 子:26
专家分:4
注 册:2013-3-10
收藏
得分:0 
strcpy_s,可C中无此函数啊!
2013-03-16 17:05
wang25435
Rank: 2
等 级:论坛游民
帖 子:21
专家分:16
注 册:2013-3-10
收藏
得分:0 
字母为啥弄这么乱呢
2013-03-16 18:07
快速回复:求助:此段代码如何改成函数调用?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015799 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved