anu*_*han 0 c c++ gcc turbo-c++
#include<stdio.h>
int main(){
char *ptr="Helio";
ptr++;
printf("%s\n",ptr);
//*ptr++;
printf("%c\n",++*ptr);/*Segmentation fault on GCC*/
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Q1)这在Turbo C++中运行良好,但在GCC上它会产生分段错误.我没有得到确切的理由.
可能是运营商优先是其中一个原因.
Q2)每个编译器都有不同的运算符优先级吗?
不,运算符优先级由C标准定义,所有编译器都遵循相同的标准.
在这种情况下,Turbo C++和GCC的差异结果的原因是因为您修改了字符串文字,这是未定义的行为.
将其更改为:
char arr[] = "Helio";
char *ptr = arr;
Run Code Online (Sandbox Code Playgroud)
你现在可以修改字符串的内容.请注意,arr它本身是数组名称,无法修改,因此我添加了一个新的指针变量ptr并将其初始化为指向数组的第一个元素.