0

我试图将一个字符串分成两部分以传递给两个孩子。第一部分应为 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);
4

3 回答 3

2

strncpy如果您不需要它并且不知道它的确切作用,请不要使用它。

在您的情况下,这完全是多余的,无论如何您都知道要复制的数组的大小。所以使用memcpy

memcpy(lstring, passed, left);
lstring[left] = '\0';
memcpy(rstring, passed+left, right);
rstring[right] = '\0';
于 2013-10-12T20:33:47.787 回答
2

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

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);
}
于 2013-10-12T19:40:20.597 回答
0

在每个 strncpy 后添加 NULL 字符

lstring[left]='\0';


rstring[right]='\0';
于 2013-10-12T19:42:00.113 回答