为什么printf(' c')导致分段错误?

时间:2017-10-31 13:59:06

标签: gcc-warning

这是我的测试代码。

#include <stdio.h>

int main() {
    printf('c');
    return 0;
}

SO: ubuntu16.04

编译器版本: gcc5.3

运行上面的代码导致&#34; movdqu(%rdi),%xmm0&#34;中的分段错误错误。

我有谷歌,但我想知道为什么导致分段错误

3 个答案:

答案 0 :(得分:0)

因为你试图pring char而不是字符串。 printf()函数的第一个参数是格式字符串。 字符串在&#34;&#34;中引用,&#39;&#39;

答案 1 :(得分:0)

使用GDB调试程序时,我喜欢这个错误。 image

答案 2 :(得分:0)

SHORT:

这是C:

printf函数的原型
int printf ( const char * format, ... );

你应该传递c-string(比如&#34;这是我的信息&#34;)而不是char

具体:

这是C:

printf函数的原型
int printf ( const char * format, ... );

这意味着第一个参数应该是指向以char为空的终止数组的指针。实际上,printf读取第一个参数的值,该值是内存中c字符串的地址,然后转到该地址并按字节读取字节以达到空字符。在两种情况下,此代码会导致分段错误:

  1. 地址由printf的第一个参数指出,是您程序的内存地址的出站。
  2. printf在到达程序的内存边界之前,无法找到从指定地址开始的任何空字符。
  3. 请注意使用非指针变量代替指针。这会导致您的程序在没有任何争议原因的情况下崩溃。