【问题标题】:Iterating through a const char [closed]遍历 const char [关闭]
【发布时间】:2021-10-27 01:53:49
【问题描述】:

在 C 中,如果我想遍历数组并获取每个字母的 ascii 值,我会这样做吗

const char array[] = "name"
for (int i=0; i<4; i++){
    printf("%s", array['i']);}

我仍然不熟悉 C,如果有任何指点,我将不胜感激。

【问题讨论】:

  • @SergeyKalinichenko 哎呀,意思是把'i'放在那里而不是'0'。不过会变成 %c
  • @HAL9000 是的,这就是我想要做的,谢谢。
  • 使用"%d " 作为格式字符串(注意空格)。使用array[i] 而不是array['0']。检查是否缺少分号。
  • @John 当您看到拼写错误时,请单击 edit 以更改您的问题。

标签: c constants


【解决方案1】:

格式说明符%s 表示“打印字符串”,所以这不是您想要的。如果您想要十进制的 ascii 值,请使用 %d%u。如果您想要十六进制的 ascii 值,请使用 %x

还要注意索引是array[i]

此外,使用 strlen 而不是硬编码的 4。通过这样做,您可以将“名称”更改为“WhatEver”,而无需更改循环条件。

喜欢:

const char array[] = "name";
for (size_t len = strlen(name), i = 0; i < len; i++)
{
    printf("%d ", array[i]);
} 
puts("");

【讨论】:

  • 你应该检查你的编译器做了什么,但如果没有优化,它可能会在每次迭代时调用strlen(),这会给你循环的二次行为。即使进行了优化,它也可以这样做(尽管对于简单的情况,尤其是使用常量字符串,它可以避免重复调用)。通常,您应该将for (size_t len = strlen(name), i = 0; i &lt; len; i++) 视为循环控制,确保只调用一次strlen()
猜你喜欢
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
相关资源
最近更新 更多