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