gpt4 book ai didi

C:字符串赋值给字符数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:29:46 24 4
gpt4 key购买 nike

我读完这篇文章回来了 c-faq question我完全不知道这里发生了什么。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main ()
{
char ar[3]="NIS", *c;
printf ("%s\n", ar);
strcpy (c, ar);
printf ("%s\n", c);
if (ar[4] == '\0')
{
printf ("Null");
}
else
{
printf ("%c\n", ar[4]);
}
}

这里我已经分配了“NIS”等大小的声明数组。当我尝试访问 ar[3]、ar[4] 时它给出 null 为什么?在 ar[3] 的情况下没问题,但为什么在 ar[4] 的情况下 另一个想法:在 c-faq 中提到,如果你分配任何等于声明数组大小的字符串,你不能使用 printf ("%s"), 以及 c-faq 中提到的该数组上的 strcpy()。但在我上面的代码中,我在这里使用了 printf 和 strcpy,两者都工作正常。可能是我解释错了,请纠正我。另一个问题是,当我尝试将 ar[5] 与 null 进行比较时,它没有打印任何可以的东西,但为什么它为 ar[4] 打印 Null。我对这个“NIS”字符串的想法将像这样存储在内存中。 .

提前致谢。

  --------------------------------------------------------
| N | I | S | /0 | Garbage value here
|_______|________|_______|________|_____________________
ar[0] ar[1] ar[2] ar[3]

好吧,当我将它与 '\0' 进行比较时,ar[3] 给出 null,这没问题,但是当我将它与 ar[4] 进行比较时,它仍然给我 null 而不是一些垃圾值..

最佳答案

您的代码表现出未定义的行为。它偶然为你工作,但在另一台机器上它可能会失败。正如您从常见问题解答中了解到的那样,该代码无效。但这并不意味着它总是会失败。这就是未定义行为的本质。从字面上看,任何事情都有可能发生。

访问 ar[3] 是非法的,因为它超出了数组的末尾。此数组的有效索引为 0、1 和 2。

您没有为 c 分配内存,因此对指针的任何取消引用都是未定义的行为。

您的main 声明是错误的。你应该写:

int main(void)

关于C:字符串赋值给字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10631291/

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