私は以前の投稿を見てきました。関数からメインへのポインタを返そうとしています。ここで私が持っているものである...ここで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
自動ストレージクラスのポインタをローカル変数に戻してください!そして、何か似たようなものが毎秒ここでポップアップしています –
'char month [20] =" January " ; 'はローカル(自動)変数です。関数が返ってくると範囲外になるので、ポインタを返すのは*未定義の動作*です。 –