Malloc和strncpy

时间:2013-10-12 19:31:49

标签: c malloc strncpy

我正在尝试将字符串拆分为两个以传递给两个孩子。第一部分应为12'0'字符,第二部分应为13'1'字符。当我执行这段代码时,我没有得到这些东西。特别是这是输出。 父左:00000000000 父权利:0000000000001 我不知道为什么,有人可以帮忙吗?

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);

3 个答案:

答案 0 :(得分:2)

问题是strncpy()如果因为限制而停止而不是到达源字符串的末尾,则不会添加空终止符。所以你需要添加null终止符。

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);
}

答案 1 :(得分:1)

如果您不需要strncpy并且不确切知道它是什么,请不要使用memcpy

在你的情况下它是完全多余的,你知道要复制的数组的大小,无论如何。所以使用memcpy(lstring, passed, left); lstring[left] = '\0'; memcpy(rstring, passed+left, right); rstring[right] = '\0';

{{1}}

答案 2 :(得分:0)

在每次strncpy之后添加NULL字符

lstring[left]='\0';


rstring[right]='\0';