2014-09-10 180 views
2

我會很感激他能幫助我的人。請注意,我使用visual studio 2010在CLR(公共語言運行時)中進行編程。我已將字符分配給具有動態內存分配的字符串。現在我想將它複製到另一個靜態字符串中。但是當我在複製之後打印靜態文件時,它正在用一些垃圾字符複製主要字符串。我需要刪除垃圾字符。請幫幫我。將動態分配的char *字符串複製到新的char *字符串中

int i; 
char *encode_data,*copy_data; 
    encode_data=(char*)malloc(5*sizeof(char)); 
    for(i=0;i<5;i++) 
     { 
     *(encode_data+i)='a'; 

     } 
copy_data=encode_data; 
printf("\nEncode Data= "); 
for(i=0;i<5;i++) 
     { 
     printf("%c",*(encode_data+i)); 
     } 
printf("\nCopy Data= %s",copy_data); 
free(encode_data); 

但輸出打印一些'2'作爲權力。我只需要將字符串copy_data作爲字符串輸入到encode_data中。謝謝。

enter image description here

回答

3

你需要用空在字符串末尾附加\0終止您的字符串。

encode_data = malloc(6*sizeof(char)); 
for(i = 0; i < 5; i++) 
    encode_data[i] = 'a'; 
encode_data[i] = '\0'; 
+1

由於打印好,但另一種運行時發生錯誤後的正常塊#60檢測到堆損壞。好的,現在你可以宣佈它爲6個字符。謝謝。 @haccks – 2014-09-10 12:26:22

0

複製的字符串不是零終止。可以打印的字符串不包含零終止子是這樣的:

int copy_data_len = 5; 
printf("\nCopy Data= %.*s", copy_data_len, copy_data); 

可選地分配一個或多個字符的零終止子,並將其設置爲0。

0

字符陣列的第一個元素是指向encode_data然後通過copy_data不是零終止的。 函數printf的格式說明符%s預計打印數組是零終止的。所以函數輸出字符,直到它遇到一個零字節。

爲了得到正確的結果,你應該輸出數組通過以下方式

printf("\nCopy Data= %5.5s",copy_data); 
相關問題