gpt4 book ai didi

c - 哪种方法对于初始化 wchar_t 字符串是正确的?

转载 作者:太空狗 更新时间:2023-10-29 17:14:35 25 4
gpt4 key购买 nike

我正在编写一个程序,我需要初始化一个将保存文本的消息缓冲区。我能够让它工作,但是我在下面写了各种用于在 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);

此方法首先将变量消息初始化为指向wchar_t 的指针。它是一个宽字符数组。

接下来,它会为这个字符串动态分配内存。我想我已经正确地编写了它的语法。

当我在程序中使用此方法时,它不会读取字符串中空格后的文本。

Example text: "This is a message"

它只会将“This”读入变量消息中,之后不会读取任何文本。

方法三:

wchar_t *message[100];

这会将消息定义为一个包含 100 个宽字符的数组和一个指向 wchar_t 的指针。这种初始化消息的方法效果很好。但是,我不确定这是否是正确的方法。因为 message 本身就是指向字符串中的第一个字符。那么,用大小初始化它是否正确?

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

最佳答案

神奇的是编码前缀 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");

另见 related part of the C11 Standard .

关于c - 哪种方法对于初始化 wchar_t 字符串是正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com