【问题标题】:Printing elements from an array of wide characters in C Language从 C 语言中的宽字符数组中打印元素
【发布时间】:2013-12-03 05:38:00
【问题描述】:

我有以下宽字符数组:

wchar_t alphabet[] = L"abcdefghijklmnñopqrstuvwxyz"; /*  array of wide characters */

每次我尝试运行以下代码时,都会出现“分段冲突”错误

printf("%ls %d\n", alphabet, wcslen (alphabet));
int i;
for (i = 0; i <= wcslen (alphabet); i++)
{
    printf("%ls\n", alphabet[i]);
}

我该如何纠正这个错误?

【问题讨论】:

    标签: c segmentation-fault wcs


    【解决方案1】:

    "%ls" 导致alphabet[i] 被解释为指向字符串的指针。使用"%lc"

    【讨论】:

      【解决方案2】:

      您的循环超出了数组范围。

      数组从 0 开始索引,因此像您这样的循环中的条件应该始终使用 &lt; 进行测试,而不是使用 &lt;=

      另外,您使用%s 打印单个字符,这也是错误的。对于单个宽字符,它应该是 %lc

      【讨论】:

      • &lt;= 不是这里的问题(在 == 的情况下,它将取消引用有效的尾随 L'\0')。
      • @unwind 当然alphabet[] 的索引范围可以从0 &lt;= index &lt;= wcslen (alphabet)。同意 OP 不必要地打印终止 (wchar_t)0,但这不会导致“分段违规”。 %s vs %lc 搞砸了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多