我正在寫一個程序,我需要初始化一個消息緩衝區,它將保存文本。我能夠使它工作,但是我正在寫下用C初始化字符串的各種方式,我想了解它們之間的區別。另外,哪個是最適合初始化wchar_t/char字符串的方法?哪一種方法適用於初始化wchar_t字符串?
方法一:
wchar_t message[100];
根據我的理解,這將分配200個字節的存儲空間(我認爲wchar_t的大小爲2個字節的Windows OS)。此內存分配是靜態的,它將在編譯時在可執行文件的.data部分內分配。
消息也是一個內存地址本身,指向字符串的第一個字符。
這種初始化字符串的方法對我很好。
方法II:
wchar_t *message;
message=(wchar_t *) malloc(sizeof(wchar_t) * 100);
該方法將第一初始化變量消息作爲指針wchar_t的。它是一個寬字符數組。
接下來,它會爲這個字符串動態分配內存。我想我已經正確地爲它編寫了語法。
當我在我的程序中使用這種方法時,它不會讀取字符串中空格之後的文本。
Example text: "This is a message"
它只會將「This」寫入變量信息中,之後沒有文字。
方法III:
wchar_t *message[100];
這將定義消息100個寬字符數組的指針和指向wchar_t的。這種初始化消息的方法效果很好。不過,我不確定這是否正確。因爲消息本身指向字符串中的第一個字符。所以,初始化它的大小,這是正確的?
我想更深入地瞭解它,初始化字符串的正確方法。同樣的概念也可以擴展爲一串字符。
謝謝。
你沒有表現出代碼初始化字符串,所以我們不能真正幫助你只能說方法III是錯誤的。除了變量聲明之外,你還可以顯示初始化嗎?除此之外,你不需要在C(方法II)中拋出'malloc'的返回值,並且當它實際上是一個數組(方法I)時,你會對'message'作爲一個指針產生一些不穩定的聲明。 – 2013-04-11 14:38:07
你的第三個'message'方法是100'wchar_t' *指針*。不確定這是否是您的意圖,但您的描述明顯不符合該聲明。同樣,它可能會很好地理解'wcscmp()','wcscpy()'和其他'wchar_t'函數族成員。這裏沒有魔法。 – WhozCraig 2013-04-11 14:42:26
http://stackoverflow.com/questions/3112407/wchar-t-pointer可能的重複 – devnull 2013-04-11 14:44:08