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

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

Войти
Регистрация
Восстановить пароль
 
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 73
#1

Необходимо чтобы функция new добавляла к строке 3 знака восклицания - C++

19.02.2011, 02:18. Просмотров 608. Ответов 2
Метки нет (Все метки)

Всем привет! Необходимо чтобы функция new добавляла к строке 3 знака восклицания. Так как расширить старый массив мы не можем, нужно создать новый и присвоить адрес нового массива старому.
Я написал примерно то, что нужно. Но работает не верно. В главной функции первый елемент акзывает на старый адрес. Помогите пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
void add(char * buf);
 
int main(){
char buf[12] = "Hello World";
cout<< "original - " << buf << endl;
add(buf);
cout<< "modifed - " << buf << endl;
return 0;
}
 
void add(char * buf)
{
    char newbuf[15];
    memcpy(newbuf, buf, 12);
    memcpy(&newbuf[11], "!!!\0", 4);
    cout<< "newbuf - " << newbuf << endl;
    buf = newbuf;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2011, 02:18     Необходимо чтобы функция new добавляла к строке 3 знака восклицания
Посмотрите здесь:

Как изменить программу, чтобы она добавляла К строк в начало матрицы? - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; int main() { int k,i,t,r,n,m,j; printf(&quot;Input size N: &quot;); ...

какая функция знака процента в этом коде? - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int x, y, z, a, b, c; ...

Функция для определения знака перед числом - C++
Народ такая проблема. У меня стоит обнуление то есть если я введу 000000000000000000000000000045 то он отбросит нули и примет число 45, но...

Замена в строке восклицательного знака на точку - C++
Надо написать функцию которает поменяет влюбом тексте все &quot;!&quot; знаки на &quot;.&quot; надо использовать указатели.

Определить наличие восклицательного знака в вводимой строке - C++
Вводится набор символов, если есть восклицательный знак, выводится true, если нет - false. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Определить в строке количество пробелов до первого восклицательного знака - C++
Дана строка символов.определить количество пробелов до первого восклицательного знака.если восклицательного знака нет,то напечатать...

Найти в строке цифры, идущие после знака &, и вывести их - C++
Друзья выручайте, есть строка типа Ia_НН1=&amp;35А Ib_НН1=&amp;36А Ic_НН1=&amp;37А, как мне в ней найти цифры идущие после знака &amp; и вывести их (тоесть...

Необходимо отсортировать слова в строке по алфавиту - C++
Написать программу в которой вводиться рядок слов, отсортировать слова по первой букве, нужно сделать через использование функций.

Необходимо все цифры уменьшить в 10 раз в строке - C++
Доброго времени суток всем,необходимо решить задание:Дана текстовая строка, содержащая слова и целые числа, разделенные пробелом....

Необходимо заменить буквы в строке слов(turbo c++) - C++
Нуждаюсь в помощи... Необходимо в строке слов заменить все буквы по следующему принципу: A на Z, B наY, C на X и т.д.Срочно как надо......


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
19.02.2011, 04:07     Необходимо чтобы функция new добавляла к строке 3 знака восклицания #2
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
#include <iostream>
#include <cstdlib>
#include <cstring>
 
char* add3excl(const char*);
 
int main()
{
    const char* buf = "Hello, World";
    char* p = new char [strlen(buf) + 1];
    strcpy(p, buf);
    
    std::cout << "Original: " << p << std::endl;
    p = add3excl(p);
    std::cout << "Modified: " << p << std::endl;
    delete[] p;
    return 0;
}
 
char* add3excl(const char* buf)
{
    char* newBuf = new char [strlen(buf) + 4];
    strcpy(newBuf, buf);
    delete[] buf;
    strcat(newBuf, "!!!");
    return newBuf;
}
Статический массив newbuf у тебя - локальный, и он уничтожается после возврата из функции. Использовать указатели на временные объекты (которым и является этот массив) - плохо. Тем не менее, это не могло привести к ошибке, т.к. внутри функции add ты модифицируешь не сам указатель, а его локальную копию, т.е. само значение указателя buf из функции main не изменяется.
exkilla
3 / 3 / 0
Регистрация: 28.12.2009
Сообщений: 73
19.02.2011, 17:04  [ТС]     Необходимо чтобы функция new добавляла к строке 3 знака восклицания #3
Nameless One, спасибо большое за пример и объяснения.

У меня ситуация следующая. С помощью Detour ставлю хук на вызовы send/recv.
В одной из функций в качестве параметра получаю указатель на буфер и длину буфера. Необходимо модифицировать данные, что соответственно скажется на их длине. Если я выделю новый буфер с помощью new, то мне нужно будет его освободить. В своем коде я такое делать не могу, ибо библиотека Detour должна получить данные в новом буфере и производить манипуляции с ними. Как мне правильно поступить в данной ситуации? Брать сорци библиотеки Detour и добавлять освобождение выделенного массива там? Если верно, то подскажите пожалуйста где именно необходимо освобождать массив.
Ответ Создать тему
Опции темы

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