【问题标题】:Am i accessing wrong (out of bounds) char array Index in c我在c中访问错误(超出范围)char数组索引吗
【发布时间】:2013-02-24 08:35:22
【问题描述】:

假设我们在 c 中有一个字符数组,

char a[20];

我们可以访问索引 20 以将终止的 NULL 像这样。

a[20]='\0';

但在我的算法中。 (“这是整数到字符数组转换器”)如果最后一个索引小于 char 数组的大小,则必须将终止 NULL,例如,

如果我的 int 的大小是 4(“1421”),那么我必须在索引 0 处放置“1”,在索引 1 处放置“4”,在索引 2 处放置“2”,在索引 3 处放置“1”。

最后在索引 4 处终止 NULL

index=4;
a[index]='\0';

修复相同代码的另一种方法,

if(index<20)  (Will increase one condition)
    a[index]='\0';

但我只是想知道是否有可能......将终止 NULL 放在索引 20 处。

好的,我知道了非常感谢大家的帮助。

【问题讨论】:

  • 你没有“拥有”索引 20...你的 20 元素数组只到 19!

标签: c arrays null indexing int


【解决方案1】:

数组char a[20] 有20 个字符的空间,索引从0 到19。写入a[20] 是在数组外写入,将产生不可预知的后果。您被限制为 20 个字符包括任何终止 NULL 字符。如果您需要 20 个字符加上终止 NULL 的空间,则需要将您的数组声明为 char a[21];。此外,声明 a[20] 不会在任何地方放置 NULL。

【讨论】:

    【解决方案2】:

    char a[20] : 20 表示您可以拥有来自 0-19 的元素。并且假设您最多只能使用 19 个。如果您最多填写 20 个,那么您将收到错误消息。

    改成:

    a[20+1] =&gt; a[21] 现在您可以使用 20 来放置 \0a[20]='\0'

    @AnkeshKushwah 的代码

    int main()
    {
    char arr[4]="hell";  
    printf("%c",arr[4]); // here you will see garabage. 
    printf("%c",arr[5]); // here is the terminating character. after 4.
    char arr[]="hell";   
    printf("%c",arr[4]); // here you will see terminating character.Because hell will take 
                            0-3 and 4 contains \0 
    getch();
    }
    

    【讨论】:

    • 什么?我的意思是,我几乎无法理解答案。
    • @AlexeyFrunze 你在哪一部分阅读有困难。请告诉我,我会尽量说清楚。
    • 起初你的答案太短了,无法理解。现在,它的一半包含在一行中,而不是需要滚动。我不知道你是否有一个 50 英寸的显示器,那里看起来不错,但很多人可能没有。
    • 现在好多了,但那些a[20]a[20+1]; 是模棱两可的。这些是表达式还是声明的一部分?
    • 那你应该这么说。半神秘的答案很难理解,尤其是如果您是该领域的新手。
    【解决方案3】:

    考虑用全零初始化您的 char 数组:char a[20] = { 0 };

    这样,无论您写入多少个字符(最多 19 个),您始终会以 null 结尾。

    【讨论】:

    • char a[20] = { 0 }; 将数组初始化为全零,这与所有空终止符相同。您不必显式编写循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2021-06-20
    • 2013-08-12
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多