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 ответа
Не использовать strncpy
если вам это не нужно и если вы не знаете точно, что он делает.
В вашем случае это совершенно излишне, вы все равно знаете размер массива, который хотите скопировать. Так что используйте memcpy
:
memcpy(lstring, passed, left);
lstring[left] = '\0';
memcpy(rstring, passed+left, right);
rstring[right] = '\0';
Проблема в том, что 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);
}
Добавьте символ NULL после каждого strncpy
lstring[left]='\0';
rstring[right]='\0';