2014-09-10 129 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);