我正在尝试将字符串拆分为两个以传递给两个孩子。第一部分应为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);
答案 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';