Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 47
1

Исправить функцию, возвращающую указатель на строку

05.12.2016, 19:55. Показов 991. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, не подскажите, как нужно подправить код?
C
1
2
3
4
5
6
char* GetString()
{
char x[100]; // локальный массив
scanf("%100s", &x);
return x;
}
Эта лишь часть от целого, сама программа функционирует, но вот мне сказали, что эта часть кода некорректна.
И если можно, то напишите, как можно подробнее.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2016, 19:55
Ответы с готовыми решениями:

Реализовать функцию возвращающую указатель на один из массивов
Компилятор Atmel Studio 7. Имеется 10 двумерных массивов. Хочу реализовать функцию возвращающую...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая...

Указатель на функцию возвращающую указатель
Всем привет. Подскажите, пожалуйста, пример не очень сложной программы, в которой встречается...

Реализовать функцию, возвращающую указатель на наименьший элемент матрицы
Пожалуйста, помогите написать программу на массив Написать программу с функцией, аргументом...

9
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
05.12.2016, 20:00 2
Лучший ответ Сообщение было отмечено GeniusG как решение

Решение

Распространенные ошибки
1
1 / 1 / 4
Регистрация: 05.12.2016
Сообщений: 15
05.12.2016, 20:17 3
Лучший ответ Сообщение было отмечено GeniusG как решение

Решение

C
1
2
3
4
5
6
char* GetString()
{
char x[100]; // локальный массив
scanf("%99s", x);
return x;
}
1. %[SIZE - 1]s (где SIZE - размер массива) - всегда считывай на 1 символ меньше, ведь в строке есть еще нулевой символ '\0';
2. char x[100] - это символьный массив, где имя массива является указателем, поэтому знак амперсанда не нужен;
0
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 47
05.12.2016, 20:26  [ТС] 4
Спасибо, так бы искал ответ долгое время, разбираясь в каждом термине какой-нибудь статьи из интернета. Может быть я могу добавить вас в список друзей, чтобы советоваться, а потом, кто знает, может я чем помогу?
0
1 / 1 / 4
Регистрация: 05.12.2016
Сообщений: 15
05.12.2016, 20:31 5
Лучший ответ Сообщение было отмечено GeniusG как решение

Решение

3. изменить время хранения массива:
C
1
static char x[100];
0
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 47
05.12.2016, 20:35  [ТС] 6
А можно про область поподробнее? 3 пункт для меня просто одна новая информация. Спасибо
0
1 / 1 / 4
Регистрация: 05.12.2016
Сообщений: 15
05.12.2016, 20:54 7
Время хранения массива в памяти нужно изменить, чтобы после того, как указатель на массив вернулся в main(), он сохранялся в буфере и строку можно было бы вывести. Изначально у тебя стоит класс памяти auto, и после выхода из функции твой указатель не инициализирован, то есть он будет указывать на случайную ячейку памяти, а не на первый элемент массива.

Добавлено через 14 минут
добавляйся, конечно
0
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 47
05.12.2016, 21:10  [ТС] 8
А в данном случае указателю присваивается адрес? (Просто, насколько мне известно это делается так: prtVar = &malloc( sizeof(int) ) )

int *ptrVar = malloc( sizeof(int) );
0
1 / 1 / 4
Регистрация: 05.12.2016
Сообщений: 15
05.12.2016, 21:46 9
да..malloc выделяет динамическую память и указатель указывает на первый байт

Добавлено через 2 минуты
int *ptr = (int*)malloc(SIZE * sizeof(int));
0
0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 47
05.12.2016, 21:51  [ТС] 10
Я задаю такие глупые вопросы, потому что путаюсь. Вот после объявления указателя, в следующих строках не нужно ведь писать *перед именем.
Пример:
float *ptrVar;
/* .
.
.
сто строк кода */
.
.
.
ptrVar = malloc( sizeof(*ptrVar) );
0
05.12.2016, 21:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2016, 21:51
Помогаю со студенческими работами здесь

Написать функцию, возвращающую заданную строку
Написать функцию, возвращающую заданную строку с замененными заданными символами на другие заданные...

Написать функцию принимающую массив и возвращающую указатель на динамический массив
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий...

Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на перевёрнутую строку
Разработать и испытать функцию, которая переворачивает строку и возвращает указатель на...

Реализовать функцию Revert(s), возвращающую строку, полученную из символов, составляющих s
2. Реализовать функцию Revert(s), возвращающую строку, полученную из символов, составляющих s,...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru