我有個問題,關於將undeclared String
傳遞給Function
。C編程 - 將未聲明的字符串傳遞給函數(內存分配)
下面的代碼編譯和工作正確(在字符串被正確打印)。我試圖理解代碼如何處理內存分配的細節(編譯器是否從「String」生成一個臨時變量,並將其傳遞給函數?)。
通常我會聲明一個char
數組來保存字符串,然後將其傳遞給函數 - 這在內存分配方面很有意義。
如果字符串是按照下面的程序直接傳遞的話,我特別關注是否存在有關內存泄漏的問題(例如,長時間運行的程序將大量字符串傳遞到日誌 - 每個字符串是否都創建某種新的字符串變量,其內存從不釋放等)。
代碼 - 編譯在Visual Studio 2013
#include <stdio.h>
//Function Declaration
int MyFunction(char *SomeString);
int main(void)
{
MyFunction("MyString");
return 0;
}
//Function Code
int MyFunction(char *SomeString) {
printf("Passed String: %s \n", SomeString);
return 0;
}
這可能是值得一提的爲OP,每當一個數組變量是在表達式中使用它被轉換爲一個指向第一數組的元素。 – jensa
先生,我確實有疑問,如果在函數fun()中聲明瞭'char * c =「Some string」'。那麼'''一些字符串''仍然是* hiddden全局對象*,並且將被存儲在*初始化的只讀數據段*或將* auto *並存儲在* stack *中? – Raman
@ARBY其中*正確*結束分配和存儲(物理)取決於編譯器及其優化。但是從語言的角度來看,它是一個具有靜態存儲持續時間的'const char'數組,因此是全局的。 – Angew