我想使用指针将一个字符串复制到另一个字符串,我从printf函数获取垃圾值(一些未知字符)。这有什么问题? 输出是“用于复制的字符串**”。在**获得一些未知角色的地方。
#include <stdio.h>
#include <conio.h>
void main()
{
char *s="string for copy",*c,*temp;//temp is used to back the
//pointer on 1st position
clrscr();
while(*s!=NULL)
{
*c=*s
c++;
s++;
}
c='\0';
c=temp;//back pointer to first position
printf("String from c:);
puts(c);
getch();
}
答案 0 :(得分:0)
c
char *
未向其分配内存。因此,引用它 - 从中读取或写入它 - 是未定义的行为。
在将字符复制到其中之前,使用c
或其他功能为malloc()
分配适当的内存。
当您尝试使用puts()
进行打印时,以及当您通过*c = *s
复制字符时,问题实际上并不存在。
除malloc()
以外,请更改以下代码
...
//allocate memory for c
temp = c;
while(*s!='\0')
{
*c=*s
c++;
s++;
}
*c='\0'; //use *c
c=temp;
...
答案 1 :(得分:0)
您需要为char *
变量分配内存。
此外,您永远不会为temp
分配值(或为其分配空间),但稍后在您的代码中指定c = temp
。这意味着c
当前位于内存中的任何位置都会被分配到temp
位置的内存中。