哪一种方法适用于初始化wchar_t字符串?

问题描述:

我正在写一个程序,我需要初始化一个消息缓冲区,它将保存文本。我能够使它工作,但是我正在写下用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的。这种初始化消息的方法效果很好。不过,我不确定这是否正确。因为消息本身指向字符串中的第一个字符。所以,初始化它的大小,这是正确的?

我想更深入地了解它,初始化字符串的正确方法。同样的概念也可以扩展为一串字符。

谢谢。

+0

你没有表现出代码初始化字符串,所以我们不能真正帮助你只能说方法III是错误的。除了变量声明之外,你还可以显示初始化吗?除此之外,你不需要在C(方法II)中抛出'malloc'的返回值,并且当它实际上是一个数组(方法I)时,你会对'message'作为一个指针产生一些不稳定的声明。 – 2013-04-11 14:38:07

+1

你的第三个'message'方法是100'wchar_t' *指针*。不确定这是否是您的意图,但您的描述明显不符合该声明。同样,它可能会很好地理解'wcscmp()','wcscpy()'和其他'wchar_t'函数族成员。这里没有魔法。 – WhozCraig 2013-04-11 14:42:26

+0

http://*.com/questions/3112407/wchar-t-pointer可能的重复 – devnull 2013-04-11 14:44:08

这实际上取决于您想要做什么以及如何使用数据。如果您在全球范围内需要它,请通过任何方式定义一个静态数组。如果您只需要一种方法,请在方法中执行相同的操作。如果你想在功能之间传递数据,在更长的生命周期内,使用内存并使用它。

但是,您的方法III是错误的 - 它是一个100个指针的数组。如果你想创建一个100大wchar_t数组和指针,你需要使用:

wchar_t message[100], *message_pointer; 

此外,关于术语:你只声明在方法的变量我,你从来没有指定任何东西给它。

的法宝是L

#include <wchar.h> 

... 

wchar_t m1[] = L"Hello World"; 
wchar_t m2[42] = L"Hello World"; 
wchar_t * pm = L"Hello World"; 

... 

wcscat(m2, L" again"); 

pm = calloc(123, sizeof *pm); 
wcspy(pm, L"bye");