2013-10-12 52 views
0

我想分成兩個字符串傳遞給兩個孩子。第一部分應該是12'0'字符,第二部分應該是13'1'字符。當我執行這個代碼時,我沒有得到這些東西。特別是這是輸出。 家長左:00000000000 家長右:0000000000001 我不知道爲什麼,有人可以幫忙嗎?Malloc和strncpy

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

爲什麼要計算左和右,如果你只是要硬編碼12和13在這裏。這個不成立。 – StoryTeller

+0

對,我改變它只是爲了試圖瞭解發生了什麼。最終我會左右用戶。 – ReezaCoriza

+2

您不需要乘以sizeof(char)' - strncpy的參數是要複製的字符數,而不是大小。 – Barmar

回答

1

後不要使用strncpy如果你不需要它,如果你不知道到底它做什麼。無論如何,你知道你想要複製的數組的大小。你的情況是完全多餘的,你知道你想要複製的數組的大小。所以使用memcpy

memcpy(lstring, passed, left); 
lstring[left] = '\0'; 
memcpy(rstring, passed+left, right); 
rstring[right] = '\0'; 
+0

「如果你不需要它,如果你不知道它做了什麼,就不要使用'strncpy'。」 * any *函數也可以這樣說。但是,是的,'strncpy'特別具有誤導性。 –

+0

謝謝。這工作,你說得對,我不明白strncpy。也許有一天。 – ReezaCoriza

+0

['strncpy()'函數]的一個非常好的解釋](http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not-safer-strcpy.html) 。 –

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); 
} 
0

添加NULL字符每個函數strncpy

lstring[left]='\0'; 


rstring[right]='\0'; 
+1

空字符。 'NULL'是一個空*指針*常量。 –