【问题标题】:How to work with wchar_t strings? [duplicate]如何使用 wchar_t 字符串? [复制]
【发布时间】:2012-04-15 01:48:07
【问题描述】:

可能重复:
In C++, Why can't I write to a string literal while I can write to a string object?

我第一次体验 wchar_t 字符串,但遇到了很多麻烦。每次我尝试访问 wchar_t* 中的字符时,程序都会因分段错误而崩溃。如果我想用另一个字符替换字符串中的一个字符,我应该怎么做?但是当从字符串末尾删除一个字符时呢?

wchar_t * my_string[] = L"Hello";
my_string[0] = L'Y'; // Should be "Yello". Instead, gives segmentation fault

[编辑] 没关系,我只是把自己弄傻了。我会在互联网上的其他地方检查。是我的错,我不应该用这么愚蠢的问题来打扰你……

【问题讨论】:

  • 没有示例代码,这个问题比没用还糟糕。
  • 该代码甚至不合法。 my_string[1] 的类型是wchar_t*,不能将字符值赋给指针变量。您似乎也不了解从零开始的索引。
  • 好吧,除非我想自欺欺人,否则我应该修改我的 C 知识。我知道从零开始的索引,但我习惯于使用索引 1 中的其他类型的数组。我只是匆忙在上面打了一个错字。这是真的,我没有太多的编程经验。

标签: c++ wchar-t


【解决方案1】:

您没有提供太多信息,但是,由于您谈到分段错误,最常见的错误源于内存管理函数通常在字节上工作,而 wchar_t 的大小大于 1。

在对 char 进行指针运算时,sizeof(char) 几乎从不计算在内,因为它的定义是 1。但wchar_t 更宽,因此在需要字节长度的地方,必须放置sizeof(wchar_t) 的乘积。

[编辑] 抱歉,示例与wchar_t 本身无关:

wchat_t* my_string[] 是一组 wchar_t 指针,其中第一个指向“Hello”,另一个未初始化。只需删除 *。

【讨论】:

  • 我刚刚在上面添加了示例代码...感谢您的友好回答。
  • 非常感谢您的帮助,我似乎只是在自欺欺人,炫耀我的糟糕经历。但是,如果我有一个以 wchar_t *(宽字符字符串)作为其参数之一的函数并且我想对其进行更改怎么办?
  • @PetruDimitriu wchar_t* 在语义上与 char* 或 int* 没有区别。如果它指向 10 wchar_t 并且您想更改第 7 个,只需执行 ptr[6] = L'.';问题是如果 ptr 指向一个文字(一个字符串常量),你不能改变它,因为它被存储为只读。
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2012-09-09
  • 2015-02-27
  • 2015-02-15
  • 2023-03-15
相关资源
最近更新 更多