想 c語言函式 返回(字串)資料。
#include
#include
#include
char
*test()
;strcpy
(str,
"abc");
printf
("%s11\n\n"
, str)
;return str;
}int
main()
;strcpy
(str1,
test()
);printf
("%s22\n\n"
, str1)
;return0;
}
執行結果:
baoshaohua:gdb bao$ gcc -o test test2.c
test2.c:33:12: warning: address of stack memory associated with local variable 'str' returned
[-wreturn-stack-address]
return str;
^~~1 warning generated.
解析:
1、test函式裡面的 str的作用域只在本函式內。解決方法1(malloc申請記憶體)
#include
#include
#include
char
*test()
intmain()
;strcpy
(str1,
test()
);printf
("%s22\n\n"
, str1)
;return0;
}
執行結果:
baoshaohua:gdb bao$ gcc -o test test2.cbaoshaohua:gdb bao$ ./test
abc11
abc22
baoshaohua:gdb bao$將介面裡面的字串「放到」malloc的記憶體中。
解決方法2(申請全域性的指標)
//char str[10] = ; 這樣也是可以的,函式裡面就不用malloc
char
*str;
char
*test()
intmain()
;strcpy
(str1,
test()
);printf
("%s22\n\n"
, str1)
;return0;
}
指標類似的變數str是全域性的。不會有作用域小的問題。
指標、指標陣列
char * str = null;
char str[10] = ;
三、 return返回 intint test()
int main()
這樣的話,其實就相當於test()返回乙個int的值,這個值儲存到乙個臨時的變數裡面。
然後這個臨時變數再賦值給num。
因為int變數是可以直接賦值的,所以不會出錯。
但是如果是字串的話,字串是不可以直接賦值的。。。。所以,(也可以這麼理解)
C語言常見問題
在c語言中,有乙個 流 的概念 流可以分為兩種型別 文字流 檔案 和二進位製流 檔案 文字流是解釋性的,最長可達255個字元 二進位製流是非解釋性的,一次處理乙個字元。在用c語言程式設計的時候,我們都是用 include指令包含型別為 h 的檔案,那麼可以用該指令包含型別不為 h 的檔案嗎?答案是 ...
C語言常見問題
1 嵌入式與微控制器的區別 從軟體上,行業裡經常把晶元中不帶mmu memory management unit記憶體管理單元 從而不支援虛擬位址,只能裸奔或執行rtos 實時作業系統,例如ucos 華為liteos rt thread freertos 的system,叫做微控制器 例如stm32...
C語言常見問題 pdf
4.8 我看到了用指標呼叫函式的不同語法形式。到底怎麼回事?最初,乙個函式指標必須用 操作符 和一對額外的括弧 轉換為 乙個 真 正的 函式才能呼叫 int r,func fp func r fp 而函式總是通過指標進行呼叫的,所有 真正的 函式名總是隱式的退化為指 針 在表示式中,正如在初始化時一...