请指点关于指针的简单问题

stevenying 2004-04-06 03:02:44
#include <stdio.h>
#include <string.h>

char *temp_name(void)
{
char name[30];
static int sequence = 0;

++ sequence;
strcpy(name, "temp");

name[3] = sequence + '0';

name[4] = '\0';

return(name);
}

int main()
{
char *temp_name(void);

printf("Name: %s\n", temp_name());

return 0;
}

请问输出的为什么不是tem1? 问题出在哪里? 怎么改正,谢谢
...全文
37 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenying 2004-04-06
  • 打赏
  • 举报
回复
明白,谢谢
moswawa 2004-04-06
  • 打赏
  • 举报
回复
static 是静态变量, 但我刚才这种用法并不好.你还是用第二种方法吧.
static char name[30]是内部静态变量,他同自动变量(char name[30])一样局部于特定的涵数(temp_name).但有一点不同,他不管temp_name是不是调用,或调用后推出了.它都一直存在的.

我的第一种方法就是利用这点,返回了存它的地址.
stevenying 2004-04-06
  • 打赏
  • 举报
回复
请教,为什么声明成static就可以了,小弟初学,请指教,谢谢
moswawa 2004-04-06
  • 打赏
  • 举报
回复
晕,打错了,是这样:
#include <stdio.h>
#include <string.h>

char *temp_name(void)
{
static int sequence = 0;
static char name[30];
++ sequence;
strcpy(name, "temp");

name[3] = sequence + '0';

name[4] = '\0';

return(name);
}

int main()
{

printf("Name: %s\n", temp_name());

return 0;
}

OR

#include <stdio.h>
#include <string.h>

void temp_name(char *name)
{
static int sequence = 0;
++ sequence;
strcpy(name, "temp");

name[3] = sequence + '0';

name[4] = '\0';

return;
}

int main()
{
char name[30];
temp_name(name);
printf("Name: %s\n", name);

return 0;
}
moswawa 2004-04-06
  • 打赏
  • 举报
回复
因为在退出temp_name这个涵数的时候,name这个数组已经被系统释放了.name的有效范围是在temp_name这个函数里,
你可以这样
#include <stdio.h>
#include <string.h>

char *temp_name(void)
{
static int sequence = 0;

++ sequence;
strcpy(name, "temp");

name[3] = sequence + '0';

name[4] = '\0';

return(name);
}

int main()
{

printf("Name: %s\n", temp_name());

return 0;
}

还可以这样
#include <stdio.h>
#include <string.h>

void temp_name(char *name)
{
static int sequence = 0;

++ sequence;
strcpy(name, "temp");

name[3] = sequence + '0';

name[4] = '\0';
}

int main()
{

printf("Name: %s\n", temp_name());

return 0;
}
stevenying 2004-04-06
  • 打赏
  • 举报
回复
我运行后,输出的不是tem1
gwcui 2004-04-06
  • 打赏
  • 举报
回复
输出的是tem1呀,没错呀!
另外main()中
char *temp_name(void);是费话,
函数声明也不是这样的。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧