0

文字列を 2 つに分割して 2 人の子に渡そうとしています。最初の部分は 12 文字の「0」で、2 番目の部分は 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()、ソース文字列の末尾に到達するのではなく、制限のために停止した場合に null ターミネータを追加しないことです。したがって、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);
}
于 2013-10-12T19:40:20.597 に答える