Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KostyaKulakov
Заблокирован
#1

Не присвается значение - C++

18.02.2013, 20:15. Просмотров 233. Ответов 7
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string.h>
 
void reverse(char* s, size_t len)
{
    char* temp = new char[len];
 
    // как можно данное выражение объеденить в 1 строчку?
    len /= sizeof(s[1]);
    --len;
    // ==================================================
 
    for(int i = 0; i < len+1; ++i)
        temp[i] = s[len-i];
    
    temp[len+1] = *"\0";
 
    s = temp;
 
}
 
int main()
{
    char* test = "i am is noob C pluse pluse";
 
    reverse(test, strlen(test));
 
    std::cout << test << std::endl;
 
    return 0;
}

массив в стиле C temp формируется, те всё ок.

при присваивание

C++
1
s = temp;
присваивание не происходит. почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2013, 20:15     Не присвается значение
Посмотрите здесь:

В квадратной матрицы поменять местами столбик, содержащий наибольшее значение со столбиком, который содержит наименьшее значение C++
C++ Определить, является ли введенное значение года високосным, если введено корректное значение
C++ Вывести начальные индексы всех елементов массива, значение которых превышает заданое значение А.
C++ программа, которая бы вычисляла среднее значение, максимальный и минимальный элемент второй колонки Excel и выводила это значение на экран
C++ В квадратной действительной матрице порядка N поменять местами строку, содержащую наибольшее значение, со строкой, содержащей наименьшее значение
Необходимо создать массив на 1 елемент, и записать туда значение. Пользователь может добавить значение или удалить. И выйти C++
C++ Заданы два массива А(5) и И(4). Первым на печать вывести массив, содержащий наибольшее значение. Напечатать также это значение и его порядковый номер
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1250 / 1133 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
18.02.2013, 20:20     Не присвается значение #2
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
присваивание не происходит. почему?
Присваивание происходит, но s - локальная для ф-ии копия аргумента, значение temp так не изменить.
KostyaKulakov
Заблокирован
18.02.2013, 20:22  [ТС]     Не присвается значение #3
только по передачи по ссылки можно достичь желаемого эффекта.

C++
1
void reverse(char*& s, size_t len)
но

задача передача по указателю.
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.02.2013, 20:22     Не присвается значение #4
C++
1
static temp
или возвращать указатель
gray_fox
What a waste!
 Аватар для gray_fox
1250 / 1133 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
18.02.2013, 20:24     Не присвается значение #5
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
C++
1
char* test = "i am is noob C pluse pluse";
C++
1
char const*
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
C++
1
*"\0"
C++
1
'\0'
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
C++
1
char* temp = new char[len];
C++
1
char* temp = new char[len + 1]; // под под завершающий '\0'
это как минимум...
KostyaKulakov
Заблокирован
18.02.2013, 20:26  [ТС]     Не присвается значение #6
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
char const*

если мы сделаем константным массив, то ревёрс просто не будет работать.

ладно всем спасибо.
gray_fox
What a waste!
 Аватар для gray_fox
1250 / 1133 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
18.02.2013, 20:27     Не присвается значение #7
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
присваивание не происходит. почему?
Собственно сам указатель менять не к чему, насколько я понимаю.

Добавлено через 41 секунду
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
если мы сделаем константным массив, то ревёрс просто не будет работать.
C++
1
char test[] = "I am noob in C plus plus";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2013, 20:30     Не присвается значение
Еще ссылки по теме:

Подскажите как добавить вычесленное среднее значение из подпрограммы 1, в подпрограмму 2, а то в подпрограмме 2 берет среднее значение = 0 C++
C++ Вывести на экран значение t при котором функция x(t) принимает максимальное значение
C++ Функция формирующая целое значение по строке из нулей и единиц, кодирующей это целое значение в двоичной форме
C++ Переполнение знаковых целых чисел: почему значение переменной обнуляется, а не записывается младшее значение?
C++ Вычислите значение выражения. Значение х вводится с клавиатуры

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

Или воспользуйтесь поиском по форуму:
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
18.02.2013, 20:30     Не присвается значение #8
KostyaKulakovуказатель на строку нельзя присваивать или менять, потому что он указывает на константную область памяти, т.е. литеральную константу в виде строки.
Yandex
Объявления
18.02.2013, 20:30     Не присвается значение
Ответ Создать тему
Опции темы

Текущее время: 17:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru