puts函数在C中给出了垃圾值

时间:2014-06-20 13:15:07

标签: c

我想使用指针将一个字符串复制到另一个字符串,我从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();

}

2 个答案:

答案 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位置的内存中。