C编程。字符分割错误

时间:2017-05-02 07:58:06

标签: c

这是我简单的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) 

2 个答案:

答案 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;
}