char * print_buf()
{
    char c[4] = "23";
    return c;
}
void main()
{
  printf("%s",print_buf());
}上面的代码为什么输出的是乱码?

解决方案 »

  1.   

    这乱码才怪...你的c都是栈空间里面的, print_buf()都退出来了, 去运气好就不出错, 运气不好就直接报地址错误了...
      

  2.   

    -----------------------------
    是不是函数要返回指针的内容应该这样写:
    -----------------------------char * print_buf(char * buf)
    {
        char c[4] = "23";
        strcpy(c,buf);
        return buf;
    }
    void main()
    {
      char s[4];
      printf("%s",print_buf(s));
    }------------------------------------
    那为什么我这样写也可以,难道是偶然?还是字符串常量存储的问题?谢谢。char * print_buf()
    {
        return "123";
    }
    void main()
    {
      printf("%s",print_buf());
    }
      

  3.   

    strcpy(c,buf);写错了,是strcpy(buf,c);
      

  4.   

    "123"
    是全局变量。char c[4] = "23";
    中,c是临时变量,"23"仍然也是全局变量。这样写是可以的,你上面有问题:
    char * print_buf(char * buf)
    {
        char c[4] = "23";
        strcpy(buff, c);
        return buf;
    }
    void main()
    {
      char s[4];
      printf("%s",print_buf(s));
    }