增量运算符给出分段错误?

pra*_*pta 2 c

可能重复:
通过指针更改C中的字符串文字?

这是一个代码示例

void main()  
{

    char *i="prady";  printf("%c ",++*i); 
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么这个代码在gcc中给出了一个分段错误,我猜它应该给'q'.当我只使用*i++它给我结果但是预先增量只是它给我一个分段错误.

还告诉我为什么void main不是写main()函数的正确方法.

Ste*_*sop 7

++*i手段++(*i).您正在尝试修改字符串文字的第一个字符,这是不允许的.就C标准而言,行为是未定义的,但是这种实现有助于隔离以提醒您该问题.

*i++手段*(i++).你正在修改你的指针i,这很好.

void main()不是编写main函数的正确方法,因为标准表示main返回int.返回值用于指示程序的成功或失败.实现可以支持其他形式main,但有两个是必需的:int main(void)int main(int argc, char *argv[]).