增加字符串文字中的字符

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)每个编译器都有不同的运算符优先级吗?

正如我在这里看到的, ++具有比解除引用运算符更高的优先级.可能是GCC和Turbo C++对待它们的方式不同.

Yu *_*Hao 5

不,运算符优先级由C标准定义,所有编译器都遵循相同的标准.

在这种情况下,Turbo C++和GCC的差异结果的原因是因为您修改了字符串文字,这是未定义的行为.

将其更改为:

char arr[] = "Helio";
char *ptr = arr;
Run Code Online (Sandbox Code Playgroud)

你现在可以修改字符串的内容.请注意,arr它本身是数组名称,无法修改,因此我添加了一个新的指针变量ptr并将其初始化为指向数组的第一个元素.