スタック領域
スタック領域について整理する
下のプログラムは何も結果が表示されない
#include <stdio.h> char *makeline(char *title, char *auther, char *bunko, int year) { char line[100]; sprintf(line, "「%s」 %s %s %d", title, auther, bunko, year); return line; } int main(void) { printf("%s\n", makeline("hogehoge", "hoge太郎", "hoge文庫", 1969)); return 0; }
原因:リターンしている配列lineがスタック上に確保されているため。
これを回避するには結果を入れる配列をパラメータに渡す
#include <stdio.h> char *makeline(char *line, char *title, char *auther, char *bunko, int year) { sprintf(line, "「%s」 %s %s %d", title, auther, bunko, year); return line; } int main(void) { char line[100]; printf("%s\n", makeline(line, "hogehoge", "hoge太郎", "hoge文庫", 1969)); return 0; }
出力結果
「hogehoge」 hoge太郎 hoge文庫 1969
スタックのイメージ
ローカル変数 |
リターンアドレス等の復帰情報 |
パラメータ |
※スタックは下から上に伸びて行く