C - 调用scanf()时的程序分段

Enr*_* Jr 0 c segmentation-fault

我现在正在学习C,我直接从我正在使用的书中复制了这个小片段.当我运行它时会出现段错误,我无法弄清楚为什么,我通过gdb运行它并且它停在第9行scanf("%s",aName);,但是打印变量的值不会带来任何可疑的外观.这件事怎么了?

#include <stdio.h>

int nameLength(char[]);

main () {
  char aName[20] = {'\0'};

  printf("\nEnter your first name: ");
  scanf('%s', aName);
  printf("\nYour first name contains %d letters.", nameLength(aName));
}

int nameLength(char name[]) {
  int result = 0;
  while (name[result] != '\0') {
    result++;
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提,它甚至没有显示提示或让我输入一个名字.它在执行后立即崩溃.

Aid*_*lly 9

在列表中,您'%s'不是"%s"- 请注意单引号和双引号之间的差异.单引号分隔字符,双引号分隔字符串. scanf()采用字符串第一个参数,因此您需要双引号.

  • 您应该在您使用的任何编译器中打开完整警告(例如-Wall for gcc).它将以启蒙的形式带给你很多.那本来就抓住了这个bug,可能已经告诉你到底出了什么问题. (3认同)