当我们能够或不能修改String Literals时

the*_*t33 -2 c string string-literals

#include<stdio.h>

int main ()
{
    char *s="FIGHT" ;
    printf("\n Whole string is %s ", s );            // Printing FIGHT -- this is fine
    s[0]='L' ;
    printf ("\n Now whole string is %s", s );  // Printing LIGHT -- My Question is how string literal constant is getting modified when it is being stored in read only memory .
}
Run Code Online (Sandbox Code Playgroud)

以上代码在我的系统上工作正常.

Sou*_*osh 6

TL; DR - 从不.

任何修改字符串文字的尝试都会调用未定义的行为.

引用C11标准,章节§6.4.5,字符串文字

[...].如果程序试图修改此类数组,则行为未定义.

§ "以上代码在我的系统上运行正常".

是的,欢迎来到未定义行为的世界,其中包括(错误地)预期的工作.

  • ^^嗯......你似乎误解了这个答案的最后一句话? (5认同)
  • @ theartist33:未定义的行为意味着一切都会发生,包括您希望程序执行的操作.但这只是运气(或者说运气不好,因为无论如何它迟早都会失败,然后你将会参加一个长期的寻找虫子的会议). (2认同)