我查看过以前的帖子,但我没有看到类似于我正在做的事情。我试图将指针从函数传递回main。这就是我的......
#include <stdio.h>
char* monthName ()
{
char month [20] = "January";
char* pMonth;
pMonth = month;
printf("Printing month from monthName function %s\n", month);
/*while (*pMonth != '\0')
{
putch(*pMonth);
pMonth++;
}*/
return pMonth;
}
int main (void)
{
char* monthName();
char* currentMonth;
currentMonth = monthName();
putch('\n');
while (*currentMonth != '\0')
{
putch(*currentMonth);
currentMonth++;
}
}
这是gdb输出
Breakpoint 1, monthName () at 132.c:4
4 char month [20] = "January";
(gdb) n
6 pMonth = month;
(gdb) n
7 printf("Printing month from monthName function %s\n", month);
(gdb) p pMonth
$7 = 0x61fee8 "January"
(gdb) n
Printing month from monthName function January
13 return pMonth;
(gdb) p pMonth
$8 = 0x61fee8 "January"
(gdb) n
14 }
(gdb) p pMonth
$9 = 0x61fee8 "January"
(gdb) n
main () at 132.c:20
20 putch('\n');
(gdb) p pMonth
No symbol "pMonth" in current context.
(gdb) q
A debugging session is active.
Inferior 1 [process 7836] will be killed.
Quit anyway? (y or n) y
error return ../../gdb-7.6.1/gdb/windows-nat.c:1275 was 5
答案 0 :(得分:1)
我认为你的问题可能是你返回一个局部变量。一旦离开创建它的方法并且堆栈增长到分配它的位置,该变量就可以被覆盖。
相反,您应该考虑malloc()
和free()
来分配在离开方法后不会被回收的持久性内存。
一些文档:http://www.programiz.com/c-programming/c-dynamic-memory-allocation
答案 1 :(得分:0)
另一种方法是在main中分配一个本地字符数组并将其传递给函数,并将函数strcpy或memcpy放入缓冲区并使用返回的值(注意你真的想要使用strcpyn或memcpyn) (如果我记得正确的函数名称)将复制的数据限制为指定的长度(为了避免缓冲区溢出,n可以作为缓冲区的长度。