Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
 
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
#1

Как пользоваться scanf для строк - C (СИ)

08.06.2014, 18:02. Просмотров 1188. Ответов 31
Метки нет (Все метки)

хоть убей не могу понять как пользоваться scanf для строк, запарило одни ошибки выдает...

пишу:
C
1
2
char *str;
scanf("%s", str);
во первых если не написать char *str = ""; выдает ошибку "Run-Time Check Failure #3 - The variable 'Str' is being used without being initialized." нахера ее инициализировать это бред, так не должно быть имхо...

во вторых даже если написал, выдает при считывании ошибку "Необработанное исключение в "0x102ddd6f (msvcr100d.dll)" в "test.exe": 0xC0000005: Нарушение прав доступа при записи "0x0041573c"." тоже вообще не понятно с какого перепуга... запарился, вроде так просто и такой гемор... че за фигня хз...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2014, 18:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как пользоваться scanf для строк (C (СИ)):

Как пользоваться scanf и printf? - C (СИ)
Ребят,расскажите пожалуйста как пользоваться scanf() и printf().Какие там типы бывают. Буду очень благодарен кто как можно подробней...

Не работает scanf в одной из строк - C (СИ)
#include <stdio.h> int main() { int a, b, c, loop; char symbol; char change; while(1) { loop=0;

Чтение строк, разделённых пробелами, через scanf - C (СИ)
В ходе решения задачи возникла проблема: нужно считывать строки, разделённые пробелами (как количество, так и их длина неизвестны, между...

Из вводимых строк найти слова, у которых заданный символ встречается дважды - Не работает scanf - C (СИ)
#include <stdio.h> #include <conio.h> #include <string.h> #include <ctype.h> #define N 80 #define M 6 int main (void) ...

Scanf читает 2 символа для 1 переменной - C (СИ)
Добрый вечер. Бьюсь над проблемой следующего характера: составил функцию, которая выдает True если введенный символ буква, и False в...

Функция scanf - параметры для фильтрации введенных данных - C (СИ)
Проблема с scanf, что нужно добавить в параметр формат, что бы она считывала кроме этого"%s" еще и все символы типа таких:...

31
helper
70 / 44 / 18
Регистрация: 11.05.2014
Сообщений: 176
08.06.2014, 18:08 #2
Указатель объявили, а память не выделили под строку.
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
08.06.2014, 18:11  [ТС] #3
Цитата Сообщение от helper Посмотреть сообщение
Указатель объявили, а память не выделили под строку.
да не должна она выделяться !!! почему то всегда работала без выделения, а тут вдруг зачем то выделять, это бред !!! но даже если выделять, вон я сделал инициализацию, все равно ошибка, вы читайте весь пост...
0
korvin_
2007 / 1494 / 235
Регистрация: 28.04.2012
Сообщений: 5,358
08.06.2014, 18:12 #4
Цитата Сообщение от GetHelp Посмотреть сообщение
во первых если не написать char *str = ""; выдает ошибку "Run-Time Check Failure #3 - The variable 'Str' is being used without being initialized." нахера ее инициализировать это бред, так не должно быть имхо...
во вторых даже если написал, выдает при считывании ошибку "Необработанное исключение в "0x102ddd6f (msvcr100d.dll)" в "test.exe": 0xC0000005: Нарушение прав доступа при записи "0x0041573c"." тоже вообще не понятно с какого перепуга... запарился, вроде так просто и такой гемор... че за фигня хз...
Осиль уже хоть какую-нибудь книжку по Си.

Добавлено через 28 секунд
Цитата Сообщение от GetHelp Посмотреть сообщение
вы читайте весь пост...
А ты почитай про работу с памятью в Си.
0
Jewbacabra
Эксперт PHP
2817 / 2404 / 904
Регистрация: 24.04.2014
Сообщений: 7,257
08.06.2014, 18:14 #5
GetHelp, а ты не задумывался куда строка должна сохраняться? А вариант с инициализацией "", это просто ................ (не матерных слов что бы описать это не нашел)
Сделай как говорит helper, нормально выдели память через malloc, calloc
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
08.06.2014, 18:26  [ТС] #6
Jewbacabra, почитайте гугл, НИГДЕ нет про выделение памяти для этого... везде так прямо считывают... чисто забиваете в гугл "си scanf" и читаете... и отвечаю у меня всегда это работало безо всяких выделений... в конце концов ОТКУДА Я ЗНАЮ СКОЛЬКО Я ВВЕДУ СИМВОЛОВ ??? вы об этом подумали? я наверное не даром объявляю указатель а не статический массив?
0
Jewbacabra
Эксперт PHP
2817 / 2404 / 904
Регистрация: 24.04.2014
Сообщений: 7,257
08.06.2014, 18:39 #7
GetHelp, приведи ссылку где написано, что надо делать так:
C
1
2
char *str;
scanf("%s", str);

Не по теме:

А вообще весь разговор с тобой напоминает следующее:
Пусть есть начинающий биатлонист, который научился неплохо проходить дистанцию, но со стрельбой всегда были проблемы. И обратился он к товарищам по опытнее, почему так происходит? Ему и отвечают: когда стреляешь ружье надо направлять в сторону мишени а не себе в ногу, сделай так и все будет нормально. Но он начинает все говорить: вы ничего не понимаете, целится в мишень не надо я всегда так делал...

И в результате этот биатлонист героически проходит n штрафных кругов с простреленными ногами, хотя этого можно было легко избежать

0
korvin_
2007 / 1494 / 235
Регистрация: 28.04.2012
Сообщений: 5,358
08.06.2014, 18:47 #8
Цитата Сообщение от GetHelp Посмотреть сообщение
почитайте гугл, НИГДЕ нет про выделение памяти для этого...
Потому что это считается очевидным, т.к. scanf не может присвоить адрес на считанную строку во внешнюю переменную.

Цитата Сообщение от GetHelp Посмотреть сообщение
в конце концов ОТКУДА Я ЗНАЮ СКОЛЬКО Я ВВЕДУ СИМВОЛОВ?
Добро пожаловать в Си. Никто не знает, поэтому обычно все используют буферы и читают строки по частям.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Jewbacabra Посмотреть сообщение
А вообще весь разговор с тобой напоминает следующее:
...
И более того: вроде этот биатлонист и хочет научиться стрелять, а инструкции по стрельбе и оружию читать напрочь отказывается.

0
ValeryS
Модератор
6783 / 5191 / 496
Регистрация: 14.02.2011
Сообщений: 17,415
08.06.2014, 18:51 #9
Цитата Сообщение от GetHelp Посмотреть сообщение
char *str;
scanf("%s", str);
может все таки так
C++
1
2
char str[100];
scanf("%s", str);
или malloc как указал Jewbacabra,
Цитата Сообщение от GetHelp Посмотреть сообщение
да не должна она выделяться !!! почему то всегда работала без выделения, а тут вдруг зачем то выделять, это бред !!!
пример плиз
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
08.06.2014, 18:51  [ТС] #10
Jewbacabra, http://www.mir-koda.ru/full_leson_cpp.php?id=7

korvin_, что за буферы и как читать строки по частям? о_О
0
ValeryS
Модератор
6783 / 5191 / 496
Регистрация: 14.02.2011
Сообщений: 17,415
08.06.2014, 18:54 #11
Цитата Сообщение от GetHelp Посмотреть сообщение
чисто забиваете в гугл "си scanf" и читаете...
читаем первая же ссылка
http://lord-n.narod.ru/download/book...C/13/scanf.htm
пример
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
int main(void)
{
  char str[80], str2[80];
  int i;
 
  /* читается строка и целое значение */
  scanf("%s%d", str, &i);
 
  /* в переменную str считывается не более 79 символов */
  scanf("%79s", str);
 
  /* целое, расположенное между двумя строками, пропускается */
  scanf("%s%*d%s", str, str2);
 
  return 0;
}
0
korvin_
2007 / 1494 / 235
Регистрация: 28.04.2012
Сообщений: 5,358
08.06.2014, 18:55 #12
Цитата Сообщение от GetHelp Посмотреть сообщение
что за буферы и как читать строки по частям? о_О
Цитата Сообщение от ValeryS Посмотреть сообщение
может все таки так
C
1
2
char str[100];
scanf("%s", str);
Точнее так:
C
1
2
char str[100];
scanf("%[99]s", str);
А лучше
C
1
2
3
4
#define BUFSIZE 100
...
char str[BUFSIZE];
fgets(str, BUFSIZE-1, stdin);
хотя это может зависеть от необходимого поведения.
0
ValeryS
Модератор
6783 / 5191 / 496
Регистрация: 14.02.2011
Сообщений: 17,415
08.06.2014, 18:55 #13
Цитата Сообщение от GetHelp Посмотреть сообщение
читаем
Пока не вникайте в работу со строками. Почему нету знака взятия адреса? Эту тему мы рассмотрим чуть позднее.
0
Jewbacabra
Эксперт PHP
2817 / 2404 / 904
Регистрация: 24.04.2014
Сообщений: 7,257
08.06.2014, 18:56 #14
GetHelp, читать надо от начала и до конца, дальше там написано:
Пока не вникайте в работу со строками. Почему нету знака взятия адреса? Эту тему мы рассмотрим чуть позднее.
тут лишь говорится что %s интерпретирует входные данные как символьную строку.
0
korvin_
2007 / 1494 / 235
Регистрация: 28.04.2012
Сообщений: 5,358
08.06.2014, 18:56 #15
Цитата Сообщение от GetHelp Посмотреть сообщение
http://www.mir-koda.ru/full_leson_cpp.php?id=7
М-да уж. Лучше K&R почитать…
0
08.06.2014, 18:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 18:56
Привет! Вот еще темы с ответами:

Scanf считывает enter, как символ конца строки. Как исправить? - C (СИ)
Добрый день. Пишу меню для программы в Visual Studio 2015, возникает проблема: scanf запоминает enter, как символ конца строки, и на...

Как очистить буфер scanf() ? - C (СИ)
Мне нужно, чтобы scanf() вызывался до тех пор, пока не будет введено целое число, но происходит зацикливание. while (scanf(&quot;%d&quot;, &amp;n)...

Не понимаю как работает scanf - C (СИ)
Здравствуйте, вот код программы. При работе программы второй scanf пропускается. Почему так происходит? Комментарии в коде. Заранее...

Как написать функцию scanf? - C (СИ)
Как написать функцию scanf? Добавлено через 5 минут Не вызвать,а написать


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.