Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамический массив, ошибка с realloc 
V
    Опции темы
AZealot
Дата 8.5.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



Имеется код. С попыткой создать 2 строки (char*)
Код

#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <malloc.h>

int main(int argc, char* argv[])
{
    char *MyString1 = 0;
    char *MyString2 = 0;

    MyString1 = (char*)malloc(11);
    memset(MyString1,'\0',11);
    MyString1 = "My string1\0";

    MyString2 = (char*)malloc(11);
    memset(MyString2,'\0',11);
    MyString2 = "My string2\0";
    realloc(MyString1,23);
    strcat(MyString1,MyString2);
    printf("%s\n",MyString1);
    printf("%s\n",MyString2);
    getch();
    return 0;
}

Вроде всё верно, компилируется нормально, но при выполнении программы происходит ошибка на
Код

    realloc(MyString1,23);

В чём загвоздка, или что не правильно? (компилировалось на MSVC)
PM MAIL   Вверх
andrew_121
Дата 8.5.2009, 13:49 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Код

MyString1 = "My string1\0";

Так делать нельзя!!!
Ты выделяешь память, потом, затираешь тот указатель и присваиваешь ему новый адрес.
Код

realloc(MyString1,23);

А тут пытаешься перемерять константный массив.
 smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Dmi3ev
Дата 8.5.2009, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



smile 
Код

    MyString2 = (char*)malloc(11);
    memset(MyString2,'\0',11);
    MyString2 = "My string2\0";

это шедевр...

Добавлено через 3 минуты и 43 секунды
можно что-то типа этого
Код

char *s1="lalala";
char *s2="lalalalala";
char *s3=new char[strlen(s1)+strlen(s2)+1];
strcpy(s3, s1);
strcat(s3, s2);



--------------------

PM MAIL   Вверх
AZealot
Дата 8.5.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



Шедевер, или нет, это уже детали. Чем заменить?
Код

    MyString2 = (char*)malloc(11);
    memset(MyString2,'\0',11);
    MyString2 = "My string2\0";

PM MAIL   Вверх
AZealot
Дата 8.5.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



Надо было так, видимо
Код

    MyString1 = (char*)malloc(11);
    memset(MyString1,'\0',11);
    strcpy(MyString1,"My string1\0");

А теперь вопрос к знающим. Насколько это коряво?)
PM MAIL   Вверх
andrew_121
Дата 8.5.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 10
Всего: 33



Цитата(AZealot @  8.5.2009,  14:20 Найти цитируемый пост)
А теперь вопрос к знающим. Насколько это коряво?)

 smile  smile 
Крайне коряво!
Код

const char* MyString1 = "My string1";

Кстати. Выше тебе уже ответили.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mrbrooks
Дата 8.5.2009, 15:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(AZealot @  8.5.2009,  14:20 Найти цитируемый пост)
Насколько это коряво?) 

Это не коряво - это просто ДИЧЬ камрад.
PM MAIL   Вверх
J0ker
Дата 8.5.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 9
Всего: 14



Цитата(andrew_121 @  8.5.2009,  15:14 Найти цитируемый пост)
Крайне коряво!

Цитата(mrbrooks @  8.5.2009,  15:17 Найти цитируемый пост)
Это не коряво - это просто ДИЧЬ камрад.

все зависит от цели
(memset определенно лишний, и на конце строки \0 не нужен - он добавляется автоматически)


--------------------
user posted image
PM MAIL   Вверх
Dmi3ev
Дата 8.5.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



Так чтоль тебе надо?
Код

int main()
{
        char *s1, *s2;
        s1=(char*) malloc(11);
        s2=(char*) malloc(11);
        strcpy(s1, "My string1");
        strcpy(s2, "My string2");
        cout<<"s1: "<<s1<<endl;
        cout<<"s2: "<<s2<<endl;
        s1=(char*)realloc(s1, strlen(s1)+strlen(s2)+1);
        strcat(s1, s2);
        cout<<"s1 after realloc: "<<s1<<endl;
        system("pause");
        return 0;
}


Это сообщение отредактировал(а) Dmi3ev - 8.5.2009, 17:34


--------------------

PM MAIL   Вверх
AZealot
Дата 8.5.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 25.4.2009

Репутация: нет
Всего: нет



Ага, то что надо. Спасибо, ошибка с присвоением действительно была глупой. После Delphi не привык ещё smile
PM MAIL   Вверх
bsa
Дата 11.5.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



AZealot, в С++ есть класс std::string, который имеет схожее с Delphi поведение - т.е. можно просто присваивать.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.