首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Malloc和strncpy

Malloc和strncpy
EN

Stack Overflow用户
提问于 2013-10-12 19:31:49
回答 3查看 3.1K关注 0票数 0

我正试着把一根线切成两条传给两个孩子。第一部分应该是12 '0‘字符,第二部分应该是13 '1’字符。当我执行这段代码时,我不会得到这两种东西。具体来说,这就是输出。家长左: 00000000000家长右: 0000000000001我不知道为什么,有人能帮忙吗?

代码语言:javascript
运行
复制
int bit_count(char *passed, int len){
int left = len/2;
int right =(len/2)+(len % 2);
char *lstring = malloc(sizeof(char)*(left+1));
char *rstring = malloc(sizeof(char)*(right+1));
strncpy(lstring, passed, sizeof(char)*12);
strncpy(rstring, passed+left, sizeof(char)*13);
printf("Parent Left: %s\n", lstring);
printf("Parent Right: %s\n", rstring);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-12 20:33:47

如果您不需要strncpy,如果您不知道它的确切功能,就不要使用它。

无论如何,在您的示例中,它是完全多余的,您知道要复制的数组的大小。所以使用memcpy

代码语言:javascript
运行
复制
memcpy(lstring, passed, left);
lstring[left] = '\0';
memcpy(rstring, passed+left, right);
rstring[right] = '\0';
票数 2
EN

Stack Overflow用户

发布于 2013-10-12 19:40:20

问题是,如果strncpy()由于限制而停止,而不是到达源字符串的末尾,它就不会添加空终止符。因此,您需要添加空终止符。

代码语言:javascript
运行
复制
int bit_count(char *passed, int len) {
    int left = len/2;
    int right = len - left;
    char *lstring = malloc(left+1);
    char *rstring = malloc(right+1);
    strncpy(lstring, passed, left);
    lstring[left] = '\0';
    strncpy(rstring, passed+left, right);
    rstring[right] = '\0';
    printf("Parent Left: %s\nParent Right: %s\n", lstring, rstring);
}
票数 2
EN

Stack Overflow用户

发布于 2013-10-12 19:42:00

在每个strncpy之后添加空字符

代码语言:javascript
运行
复制
lstring[left]='\0';


rstring[right]='\0';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19338327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档