将动态分配的char * string复制到新的char * string中

时间:2014-09-10 12:06:39

标签: c string memory dynamic

我会感谢能帮助我的人。请注意,我正在使用visual studio 2010在CLR(公共语言运行时)中编程。我已将字符分配给具有动态内存分配的字符串。现在我想将它复制到另一个静态字符串中。但是当我在复制后打印静态文件时,它会复制带有一些垃圾字符的主字符串。我需要删除垃圾字符。请帮帮我。

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 :(得分:3)

您需要通过在字符串末尾附加\0来终止字符串。

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

答案 1 :(得分:0)

复制的字符串不会以零结尾。您可以打印没有零终止符的字符串,如下所示:

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

或者为零终止符分配一个字符并将其设置为0.

答案 2 :(得分:0)

字符数组,其第一个元素由encode_data指向,然后由copy_data指向不以零结尾。 函数%s的格式说明符printf期望打印的数组以零终止。因此函数输出字符,直到遇到一个零字节。

要获得正确的结果,您应该按以下方式输出数组

printf("\nCopy Data= %5.5s",copy_data);