这是我简单的C代码,我想显示'a'值。但是,编译此程序时我收到“分段错误”。请指教。
user@linux:~/c$ cat char.c
#include <stdio.h>
int main(){
char a = 'B';
printf("test %s\n",a);
return 0;
}
user@linux:~/c$ gcc -g char.c -o char
user@linux:~/c$ ./char
Segmentation fault
user@linux:~/c$
GNU调试器
user@linux:~/c$ gdb -q char
Reading symbols from char...done.
(gdb) list
1 #include <stdio.h>
2
3 int main(){
4
5 char a = 'B';
6
7 printf("test %s\n",a);
8
9 return 0;
10 }
(gdb) run
Starting program: /home/user/c/char
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7a803e0 in _IO_vfprintf_internal (s=0x7ffff7dd4620 <_IO_2_1_stdout_>, format=<optimized out>, ap=ap@entry=0x7fffffffe488) at vfprintf.c:1632
1632 vfprintf.c: No such file or directory.
(gdb)
答案 0 :(得分:3)
未定义的行为,因为您使用了char
类型的错误格式说明符。因此,请使用%c
代替%s
。
c99 7.19.6.1第9段:
如果转换规范无效,则行为为 undefined.225)如果任何参数不是正确的类型 相应的转换规范,行为未定义。
答案 1 :(得分:0)
打印时应使用%c
代替%s
。因为%s
将尝试查找行结束char,因为它在内存中不可用,因此会抛出异常。
尝试下面的一个,它会起作用。
int main() {
char a[2] = {'B','\0'};
printf("test %s\n",a);
return 0;
}