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';
Другие вопросы по тегам