哪一种方法适用于初始化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的。这种初始化消息的方法效果很好。不过,我不确定这是否正确。因为消息本身指向字符串中的第一个字符。所以,初始化它的大小,这是正确的?
我想更深入地了解它,初始化字符串的正确方法。同样的概念也可以扩展为一串字符。
谢谢。
这实际上取决于您想要做什么以及如何使用数据。如果您在全球范围内需要它,请通过任何方式定义一个静态数组。如果您只需要一种方法,请在方法中执行相同的操作。如果你想在功能之间传递数据,在更长的生命周期内,使用内存并使用它。
但是,您的方法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");
你没有表现出代码初始化字符串,所以我们不能真正帮助你只能说方法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://*.com/questions/3112407/wchar-t-pointer可能的重复 – devnull 2013-04-11 14:44:08