C - 调用 scanf() 时出现程序段错误

发布于 2024-08-19 07:54:29 字数 544 浏览 4 评论 0原文

我现在正在学习 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;
}

编辑:我忘了提及,它甚至没有显示提示或让我输入名称。执行后立即崩溃。

I'm learning C right now, and I copied this little snippet straight from the book I'm using. It segfaults when I run it and I can't figure out why, I ran it through gdb and it stops at line 9 scanf("%s", aName);, but printing the values of the variables brings up nothing suspicious looking. What's wrong with this thing?

#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;
}

edit: I forgot to mention, it didn't even display the prompt or let me enter a name. it crashed immediately after executing it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

陈甜 2024-08-26 07:54:29

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

In the listing, you have '%s' instead of "%s" - note the diff between single and double quotes. Single quotes delimit characters, double quotes delimit strings. scanf() takes a string first argument, so you need double quotes.

和影子一齐双人舞 2024-08-26 07:54:29
scanf('%s', aName);

使用双引号:

scanf("%s", aName);

或者确定:

scanf("%19s", aName);

将字符串限制为 19 个字符

scanf('%s', aName);

Use double quotes:

scanf("%s", aName);

Or to be sure:

scanf("%19s", aName);

To limit the string to 19 characters

很糊涂小朋友 2024-08-26 07:54:29

尝试用以下内容替换 scanf 行:

scanf ("%s", aName);

注意双引号。

...里奇

Try replacing the scanf line with this:

scanf ("%s", aName);

Note the double quote.

...richie

郁金香雨 2024-08-26 07:54:29

在 scanf 中使用双引号

use double quotes in scanf

深居我梦 2024-08-26 07:54:29

如果这是一个计算字母数量的练习,那么您可以执行以下操作,但使用指针。

int nameLength(char *name)
{
    int i = 0;
    while(*name++) {
        i++;
    }
    return i;
}

If this is an exercise to count the number of letters then you could do the following, but using pointers.

int nameLength(char *name)
{
    int i = 0;
    while(*name++) {
        i++;
    }
    return i;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文