Строки в C++, начинающий
От: Вульфович Филипп  
Дата: 17.08.10 09:31
Оценка:
Добрый день! Мне по работе
приходится иметь дело с библиотекой, написанной на C++ ...
Пользуюсь Visual Studio 2005.

С пользовался только в институте — представляю только в общих чертах...
Даже не новичок, а чайник

Непонятно, как происходит работа со строками...

Чем отличается:


  char *str = "Hello, world.\n";



от

  char *str2 = new char[];
  strcpy(str2, "Hello, world.");




Выделиться одинаковое кол-во памяти?
Нужно ли потом освобождать str и str2?
Re: Строки в C++, начинающий
От: dmitry_npi Россия  
Дата: 17.08.10 09:59
Оценка: 2 (2)
Здравствуйте, Вульфович Филипп, Вы писали:
ВФ>Чем отличается:

ВФ>
ВФ>  char *str = "Hello, world.\n";
ВФ>


ВФ>от


ВФ>
ВФ>  char *str2 = new char[];
ВФ>  strcpy(str2, "Hello, world.");
ВФ>


Второй вариант не скомпилируется. Нужно указать размер, например:

  char *str2 = new char[500];
  strcpy(str2, "Hello, world.");


ВФ>Выделиться одинаковое кол-во памяти?

ВФ>Нужно ли потом освобождать str и str2?

в первом случае память выделится до выполнения программы, и её выделится столько, чтобы уместить строку "Hello, world.\n" и еще завершающий нулевой байт. То есть 15 байт.
Освобождать её не надо. Но и записывать в эту строку ничего нельзя, потому что она — константа.

Длина str2 как массива — 500 байт (или сколько пожелаете). Длина str2 как строки — 14 символов. Эту длину возвратит strlen(str2).
str2 надо освободить с помощью delete:

delete [] str2; // именно так, с пустыми квадратными скобками


В str2 можно менять символы:

str2[13] = '?'; // меняем точку на вопрос
Атмосферная музыка — www.aventuel.net
Re: Строки в C++, начинающий
От: Мишень-сан  
Дата: 17.08.10 10:00
Оценка: +1
Здравствуйте, Вульфович Филипп, Вы писали:

ВФ>Добрый день! Мне по работе

ВФ>приходится иметь дело с библиотекой, написанной на C++ ...
ВФ>Пользуюсь Visual Studio 2005.

ВФ>С пользовался только в институте — представляю только в общих чертах...

ВФ>Даже не новичок, а чайник

ВФ>Непонятно, как происходит работа со строками...


ВФ>Чем отличается:



ВФ>
ВФ>  char *str = "Hello, world.\n";
ВФ>



ВФ>от


Это первое:

ВФ>
ВФ>  char *str2 = new char[stringsize];
ВФ>  strcpy(str2, "Hello, world.");
ВФ>




ВФ>Выделиться одинаковое кол-во памяти?

ВФ>Нужно ли потом освобождать str и str2?

Второе. Судя по new используется таки С++.
Первый вариант используется, если нужна строковая константа. Тогда оптимально вообще
static const char str[] = "Hello, world.\n";

Если со строками работаете в динамике, используйте лучше std::string — он автоматизирует управление памятью.
И почитайте что-нить по С++ и STL.
Re[2]: Спасибо
От: Вульфович Филипп  
Дата: 17.08.10 10:17
Оценка:
Спасибо, все ясно.

_>Второй вариант не скомпилируется. Нужно указать размер, например:



Странно, у меня компилируется... Visual Studio 2005, проект VC++, Win32 Console Application


int _tmain(int argc, _TCHAR* argv[])
{
   char *str = new char[];

   printf(str);

   return 0;
}


Правда печатает кракозябру... Что говорит о том, что строка инициализуруется мусором...
Re[2]: Строки в C++, начинающий
От: Вульфович Филипп  
Дата: 17.08.10 10:33
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Если со строками работаете в динамике, используйте лучше std::string — он автоматизирует управление памятью.

МС>И почитайте что-нить по С++ и STL.


Спасибо, нашел... Полезная вещь. А как подключить STL к проекту?
Re[3]: Строки в C++, начинающий
От: Ytz https://github.com/mtrempoltsev
Дата: 17.08.10 10:39
Оценка:
Здравствуйте, Вульфович Филипп, Вы писали:

ВФ>Здравствуйте, Мишень-сан, Вы писали:


МС>>Если со строками работаете в динамике, используйте лучше std::string — он автоматизирует управление памятью.

МС>>И почитайте что-нить по С++ и STL.


ВФ>Спасибо, нашел... Полезная вещь. А как подключить STL к проекту?


#include <string>
Ну или любой другой нужный файл
Re[4]: Строки в C++, начинающий
От: Вульфович Филипп  
Дата: 17.08.10 10:53
Оценка:
Спасибо, работает!
Re[2]: Строки в C++, начинающий
От: WiseAlex Беларусь  
Дата: 18.08.10 11:47
Оценка:
Здравствуйте, Мишень-сан, Вы писали:

МС>Тогда оптимально вообще
static const char str[] = "Hello, world.\n";

оптимально для чего?
с одной стороны памяти ипользуется больше, с другой я знаю не так много систем (и те встроенные) на некоторых обращение будет быстрее.
Re: Строки в C++, начинающий
От: Ulitka США http://lazarenko.me
Дата: 18.08.10 16:47
Оценка:
Здравствуйте, Вульфович Филипп, Вы писали:

ВФ>
ВФ>  char *str = "Hello, world.\n";
ВФ>


А вот так делать вообще нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.