【问题标题】:Copying dynamically allocated char* string into new char* string将动态分配的 char* 字符串复制到新的 char* 字符串中
【发布时间】:2014-09-10 12:06:39
【问题描述】:

我会感谢能帮助我的人。请注意,我正在使用 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 中输入的字符串。谢谢。

【问题讨论】:

    标签: c string memory dynamic


    【解决方案1】:

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

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

    【讨论】:

    • 感谢打印正常,但在正常块 #60 后检测到另一个运行时错误发生堆损坏。好的,现在您将其声明为 6 个字符。谢谢。 @hacks
    【解决方案2】:

    复制的字符串不是以零结尾的。您可以像这样打印没有零终止符的字符串:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-03-03
        • 2020-11-28
        • 2012-01-11
        • 2011-09-23
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 2014-06-08
        相关资源
        最近更新 更多