将指针从c中的函数传递回main

时间:2016-06-12 18:26:20

标签: c

我查看过以前的帖子,但我没有看到类似于我正在做的事情。我试图将指针从函数传递回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

2 个答案:

答案 0 :(得分:1)

我认为你的问题可能是你返回一个局部变量。一旦离开创建它的方法并且堆栈增长到分配它的位置,该变量就可以被覆盖。

相反,您应该考虑malloc()free()来分配在离开方法后不会被回收的持久性内存。

一些文档:http://www.programiz.com/c-programming/c-dynamic-memory-allocation

答案 1 :(得分:0)

另一种方法是在main中分配一个本地字符数组并将其传递给函数,并将函数strcpy或memcpy放入缓冲区并使用返回的值(注意你真的想要使用strcpyn或memcpyn) (如果我记得正确的函数名称)将复制的数据限制为指定的长度(为了避免缓冲区溢出,n可以作为缓冲区的长度。