gpt4 book ai didi

c - 递增指针时的不明确行为

转载 作者:太空宇宙 更新时间:2023-11-04 01:10:43 25 4
gpt4 key购买 nike

#include<stdio.h>
main()
{

char c = 'R';
printf("%c\n",c);
c++;
printf("%c\n",c);
char *ptr ="Ramco Systems";
printf("%c\n",(*ptr));
(*ptr)++;
printf("%d\n",(*ptr));

}

第一个、第二个、第三个 printf 的输出是“R”、“S”和“R”(正如预期的那样)。然而,行“(*ptr)++;”给出运行时错误。有人可以解释为什么吗?

最佳答案

原因是因为指向ptr的内存是在编译时设置的,不可修改。

因此通过 *ptr 访问第一个字符没问题并返回 R,但是尝试增加第一个字符会产生运行时错误,因为不允许修改字符串您在编译时提供的。

为了扩展下面 Seg Fault 的评论,编写代码的更好方法是:

const char *ptr ="Ramco Systems"; //pointer to const char
(*ptr)++; // yields compiletime error because *ptr is a const char

注意在这段新代码中,声明的指针类型如何更准确,因此编译器能够在第二行给出编译时错误(比运行时错误好得多)。

关于c - 递增指针时的不明确行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12999957/

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