Description of problem: Version-Release number of selected component (if applicable): [root@el92-221124 c]# rpm -q gcc gcc-11.3.1-2.1.el9.x86_64 [root@el92-221124 c]# rpm -q kernel kernel-5.14.0-200.el9.x86_64 [root@el92-221124 c]# How reproducible: Steps to Reproduce: [root@el92-221124 c]# cat 18-3-String_s_first_char.c #include<stdio.h> int main(){ char greetings[] = "Hello World!"; printf ("%s\n",greetings); printf ("%s\n",greetings[0]); // Here ,I should use %c } [root@el92-221124 c]# gcc -o 18-3-String_s_first_char 18-3-String_s_first_char.c [root@el92-221124 c]# ./18-3-String_s_first_char Hello World! Segmentation fault (core dumped) [root@el92-221124 c]# Actual results: Segmentation fault (core dumped) Expected results: when call gcc -o 18-3-String_s_first_char 18-3-String_s_first_char.c Will get some error tips maybe? Additional info:
If you build with -Wall (enable most warnings), GCC does complain: $ gcc -Wall 18-3-String_s_first_char.c 18-3-String_s_first_char.c: In function ‘main’: 18-3-String_s_first_char.c:8:15: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=] 8 | printf ("%s\n",greetings[0]); // Here ,I should use %c | ~^ ~~~~~~~~~~~~ | | | | char * int | %d Address Sanitizer (-fsanitize=address) also catches the issue (but is not much more helpful than running the uninstrumented program under valgrind). I'm not sure what else we can do here. This is just how C works, sorry.
Wow Thanks.