![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 04.12.2009
Сообщений: 19
|
![]()
Есть такое задание:
Дана строка. Преобразовать ее следующим образом: если символ «*» в ней отсутствует, то оставить ее без изменения, иначе – заменить на символ «–» число символов после первого вхождения «*». Я попытался сделать вот так: #include<stdio.h> #include<ncurses.h> int Star(char str[]); void Change(char s[],char z[]); int main () { char str[1000],z[1000]; clear; printf ("Введите строку с символом '*' или без такового (на ваш выбор):\n"); gets(str); Change (str,z); printf(z); return 0; getch(); } int Star (char str[]) { int n; for (;str[n]=='*'); return n; } void Change (char s[],char z[]) { int i,k; k=Star(z); for (;i>k;i++) { if (s[i]==k) z[i]='-'; else z[i]=s[i]; } } Однако g++ ругается вот так: laba_3.cpp: In function ‘int main()’: laba_3.cpp:15: warning: format not a string literal and no format arguments /tmp/ccZqFiL6.o: In function `main': laba_3.cpp (.text+0x32): warning: the `gets' function is dangerous and should not be used. Не понятно следующее: 1. Почему printf (z); некорректно? 2. Почему компилятор пишет что gets опасна, и если причины есть, то какая может быть альтернатива gets? 3. Как вам вообще такой код? Что следует поправить? Потому что я чувствую что тут далеко не 2 ошибки. Помогите, пожалуиста. Заранее спасибо. Последний раз редактировалось spirit_trapper; 19.12.2009 в 00:23. |
![]() |
![]() |
![]() |
#2 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
![]() Цитата:
![]() Ошибок действительно достаточно. Насчёт 1-го и 2-го вопроса: 1) Он(компилятор) говорит, что в качестве параметра в printf передаётся не строковый литерал, содержащий строку форматирования, а переменная, в которой неизвестно что, более того, за этой переменной не следуют другие параметры. В общем не стоит особо обращать на это внимание, это лишь предупреждение о некорректно использованной функции. 2) gets действительно опасна, потому как не предлагает никаких средств для ограничения ввода, в силу чего может быть "переполнение буфера". Можете попробовать fgets вместо gets. Немного изменил Вашу программу, будут вопросы - спрашивайте Код:
Последний раз редактировалось netrino; 19.12.2009 в 00:59. |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 04.12.2009
Сообщений: 19
|
![]()
netrino
Спасибо огромное. Буду разбирать код по кусочкам. Вопросы будут. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблемы с функцией и DLL | Gott | Помощь студентам | 4 | 13.12.2009 20:21 |
Проблемы с функцией ExitWindowsEx | GaWs | Win Api | 0 | 20.11.2009 22:12 |
Проблемы с функцией СЦЕПИТЬ | motorway | Microsoft Office Excel | 20 | 12.07.2009 01:17 |
Проблемы с функцией FileWrite | Миша | Общие вопросы Delphi | 5 | 30.05.2009 19:49 |
Проблемы с функцией OCIBindByName(). | OSKiller | PHP | 2 | 19.03.2007 16:48 |