C語言常見問題 return返回字串

2021-10-04 08:50:35 字數 1801 閱讀 3460

想 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.c

baoshaohua: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返回 int
int 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 而函式總是通過指標進行呼叫的,所有 真正的 函式名總是隱式的退化為指 針 在表示式中,正如在初始化時一...