#include <string.h>
#include <stdio.h>
char *in() {
char a[10];
scanf("%s",a);
return (a);
}
int main() {
char *a; a=in();
printf("\n%s",a);
return (0);
}
-1
A
回答
3
在你的代碼,
return (a);
是返回一個局部變量的地址的嘗試。在呼叫者中,地址的任何用法(試圖訪問)將導致undefined behavior,因爲內存地址是無效。
函數返回後,函數內的局部變量將不再存在,它們的生命期終止。因此,與這些變量(對象)對應的地址變爲無效。按照C11
,章第6.2.4節
[...]如果一個對象被稱爲它的壽命之外,則該行爲是未定義的。指針的值在其指向的對象(或剛剛過去)達到其生命週期結束時變得不確定。
注:這就是說,我個人除了::return
是一個關鍵字,請不要使它看起來像一個功能。
解決方案:你需要確保其正在返回的地址變量的壽命,替代的功能範圍,所以你可以
- 使用
malloc()
和家庭分配內存 - 使用變量與
static
存儲。
0
不返回本地變量指針。使用全局替代或靜態。
char *in() {
static char a[10];
scanf("%s",a);
return (a);
}
int main() {
char *a; a=in();
printf("\n%s",a);
return (0);
}
相關問題
- 1. 無法打印函數的返回值
- 2. C通用打印數組函數 - 打印字符串數組
- 3. 打印字符串從C函數返回爲char *
- 4. 函數應該打印一個字符串還是返回它?
- 5. php函數返回空字符串。 echo正確地打印字符串;
- 6. 無法打印字符*字符串
- 7. COUT打印字符串變量無法通過構建
- 8. 打印圖像通過藍牙打印機打印字符串
- 9. 返回字符串數組的方法和打印返回數組
- 10. 返回字符串函數
- 11. cout不打印函數的返回值?
- 12. 如何打印函數的返回值?
- 13. 在函數中打印返回值
- 14. 如何打印函數的返回值?
- 15. 通過傳遞字符串從函數返回數組
- 16. Lua函數多個返回值,打印(返回值)嘗試連接字符串的結果和零
- 17. 函數無法返回值
- 18. 從函數返回字符[] /字符串
- 19. 返回本地C-字符串函數與C++字符串返回值
- 20. getJSON獲取格式化的字符串通過函數返回
- 21. 從函數返回一個字符數組將打印垃圾值,但在函數中打印得很好?
- 22. 回聲$字符串不打印數組元素而字符串的函數返回
- 23. golang無法打印內部字符串
- 24. 無法正確打印字符串
- 25. C無法打印兩次字符串
- 26. 無法在C++中打印字符串
- 27. 無法打印(char *)OpenGL字符串
- 28. OCaml如何在打印字符串後返回一個值?
- 29. Silverlight打印字符串值
- 30. 數字函數返回字符串
而不是重複回答非常常見的常見問題,如何開始關閉他們作爲重複,而不是?這個問題有2個規範重複:[指向本地變量](http://stackoverflow.com/questions/4570366/pointer-to-local-variable),當OP不知道他們在做什麼和[本地可以當OP知道這是錯誤的時,變量的內存是否在其範圍之外被訪問?](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope)但想知道爲什麼「似乎有效」。 – Lundin