【发布时间】:2013-04-03 19:30:35
【问题描述】:
我正在编写一个程序,我需要初始化一个用于保存文本的消息缓冲区。我能够使它工作,但是我正在编写以下用于初始化 C 中的字符串的各种方法,我想了解其中的区别。另外,初始化wchar_t/char字符串最合适的方法是什么?
方法一:
wchar_t message[100];
根据我的理解,这将分配 200 字节的内存空间(我认为wchar_t 的大小在 Windows 操作系统上为 2 字节)。此内存分配是静态的,它将在编译时在可执行文件的 .data 部分内分配。
message 本身也是一个内存地址,指向字符串的第一个字符。
这种初始化字符串的方法对我很有效。
方法二:
wchar_t *message;
message=(wchar_t *) malloc(sizeof(wchar_t) * 100);
这个方法首先将变量message初始化为一个指向wchar_t的指针。它是一个宽字符数组。
接下来,它将为这个字符串动态分配内存。我想我已经正确地编写了它的语法。
当我在我的程序中使用此方法时,它不会读取字符串中空格后面的文本。
Example text: "This is a message"
它只会将“This”读入变量message,之后不会有任何文本。
方法三:
wchar_t *message[100];
这会将消息定义为一个包含 100 个宽字符的数组和一个指向 wchar_t 的指针。这种初始化消息的方法效果很好。但是,我不确定这是否是正确的方法。因为 message 本身指向字符串中的第一个字符。那么,用大小来初始化,对吗?
我想更深入地理解它,初始化字符串的正确方法。同样的概念也可以扩展到字符串。
【问题讨论】:
-
您没有显示初始化字符串的代码,所以我们无法真正帮助您,只能说方法 III 是错误的。除了变量声明之外,你能显示初始化吗?除此之外,您不需要在 C 中强制转换
malloc的返回值(方法 II),并且当它实际上是一个数组(方法 I)时,您就message是一个指针做出了一些不稳定的陈述。 -
您的第三个
message方法是100wchar_t指针。不确定这是否是您的意图,但您的描述显然与该声明不符。同样,了解wcscmp()、wcscpy()和其他wchar_t函数家族成员可能对您有帮助。这里没有魔法。
标签: c arrays string-literals wchar-t