C - программа вызывает ошибки при вызове scanf () - PullRequest
0 голосов
/ 27 января 2010

Я изучаю 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;
}

edit: я забыл упомянуть, он даже не отображал подсказку и не позволял мне вводить имя. он сразу разбился после выполнения.

Ответы [ 5 ]

9 голосов
/ 27 января 2010

В листинге у вас есть '%s' вместо "%s" - обратите внимание на разницу между одинарными и двойными кавычками. Одиночные кавычки ограничивают символы, двойные кавычки разделяют строки. scanf() принимает строку в качестве первого аргумента, поэтому вам нужны двойные кавычки.

4 голосов
/ 27 января 2010
scanf('%s', aName);

Используйте двойные кавычки:

scanf("%s", aName);

Или чтобы быть уверенным:

scanf("%19s", aName);

Чтобы ограничить строку 19 символами

3 голосов
/ 27 января 2010

Попробуйте заменить строку scanf следующим образом:

scanf ("%s", aName);

Обратите внимание на двойную кавычку.

... * Richie 1006 *

2 голосов
/ 27 января 2010

используйте двойные кавычки в scanf

1 голос
/ 27 января 2010

Если это упражнение для подсчета количества букв, то вы можете сделать следующее, но с помощью указателей.

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