如何從 C 函數中返回一個字符串
了解如何從 C 函數中返回一個字符串
在我的一個 C 程序中,我需要在一個函數中返回一個字符串:
1 | xxxxx myName() { |
麻煩的是定義返回值的類型。
C 中的字符串是char
元素的數組,所以我們實際上無法直接返回一個字符串,而需要返回指向字符串第一個元素的指針。
這就是為什麼我們需要使用const char*
的原因:
1 | const char* myName() { |
下面是一個示例工作程序:
1 | #include <stdio.h> |
如果你想將結果賦值給一個變量,可以這樣調用函數:
1 | const char* name = myName(); |
我們可以以以下方式編寫指針運算符*
:
1 | const char * myName() |
所有形式都是完全有效的。
請注意使用const
,因為我從函數返回的是一個字符串文字,即以雙引號定義的字符串,它是一個常量。
請注意,在 C 中不能修改字符串文字。
還有一點要牢記的是,在 C 函數中不能返回定義為局部變量的字符串,因為變量在函數執行結束時會自動被銷毀(釋放),並且因此將不可用。如果你嘗試執行下面的代碼:
1 | #include <stdio.h> |
你會得到一個警告和一些亂碼,如下所示:
1 | hello.c:5:10: warning: address of stack memory |
注意最後的B��Z> K���⏎
行,這表明原先佔用的內存現在已被清除,該內存中有其他隨機數據。因此,我們無法得到原始的字符串。
將myName()
變為:
1 | const char* myName() { |
這樣程序可以正常工作。
這是因為變量默認分配在堆棧上。但是,當聲明一個指針時,指針所指向的值是分配在堆上的,當函數結束時,堆上的內存不會被清除。