代码之家  ›  专栏  ›  技术社区  ›  Mikulas Dite

Scanf因总线错误而失败

  •  0
  • Mikulas Dite  · 技术社区  · 15 年前

    #include <stdio.h>
    int main ()
    {
     char* foo;
     scanf("%s", foo);
     printf("entered %s", foo);
     return 0;
    }
    

    scanf foo

    1 回复  |  直到 15 年前
        1
  •  8
  •   Matti Virkkunen    15 年前

    你从不初始化 foo ,所以它指向内存中或多或少的随机位置。要么在堆栈上分配它。

    char foo[10];
    

    char *foo = (char *)malloc(10 * sizeof(char));
    

    但是,如果你是malloc,别忘了释放()。

    注意缓冲区溢出;如果有东西需要缓冲,但没有最大的大小,要非常小心。可以为指定最大长度 scanf 通过做 %9s 例如。