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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Второй ноль на конце стринга 
V
    Опции темы
bass
Дата 24.6.2012, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день прошу прощения за ламерский вопрос но не люблю студию.... А прешлось проект перетаскивать именно на нее....
Так в проекте есть в нескольких местах чар с двумя нулями на конце.....

Код Builder
Код

String Buffer = "bla bla"; 
Buffer.SetLength(Buffer.Length()+1);
Вызов в функции &Buffer[1] 


В студии такая конструкция отказалась работать вот так будет, лень лезть отладчиком(это длл) если нет то как реализовать.
Код

String Buffer = "bla bla"; 
Buffer +=  "\x0";
Вызов в функции &Buffer[1] 


Заранее спасибо.


Это сообщение отредактировал(а) bass - 24.6.2012, 13:49
PM MAIL   Вверх
borisbn
Дата 24.6.2012, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Немного сумбурно... но, кажется понятно.
И в билдере и в студии можно записать так
Код
String Buffer = "bla bla\0\0";



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bass
Дата 24.6.2012, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @ 24.6.2012,  14:36)
Немного сумбурно... но, кажется понятно.
И в билдере и в студии можно записать так
Код
String Buffer = "bla bla\0\0";

Надесь что += "\0" добавит в конце ноль....
PM MAIL   Вверх
borisbn
Дата 24.6.2012, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bass @  24.6.2012,  16:16 Найти цитируемый пост)
Надесь что += "\0" добавит в конце ноль.... 

нет. не добавит. т.к. это равносильно тому, что написать
Код
String s = "bla";
s += "";



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
KaZepKa
Дата 24.6.2012, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Разве класс string сам не ставит в конце строки \0  ?

А тормознул, второй ноль надо...


Это сообщение отредактировал(а) KaZepKa - 24.6.2012, 20:31
PM MAIL   Вверх
bass
Дата 25.6.2012, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(borisbn @ 24.6.2012,  17:02)
Цитата(bass @  24.6.2012,  16:16 Найти цитируемый пост)
Надесь что += "\0" добавит в конце ноль.... 

нет. не добавит. т.к. это равносильно тому, что написать
Код
String s = "bla";
s += "";

Так я понял что данная конструкция работать не будет....... Если записать таким образом как было предложено выше то два нуля будут ..... А как добавить второй ноль в существующий стринг в студии.....
PM MAIL   Вверх
math64
Дата 25.6.2012, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(borisbn @ 24.6.2012,  14:36)
Немного сумбурно... но, кажется понятно.
И в билдере и в студии можно записать так
Код
String Buffer = "bla bla\0\0";

Это добавит три нуля (или только один - смотря как реализован конструктор String). Один ноль C/C++ в строковой константе и так добавляет.
Если конструктор String выглядит примерно так:
Код

String::String(const char* s) {
m_length = strlen(s);
m_str = new char[m_length+1];
strcpy(m_str, s);
}

то сколько нулей не добавляй в строковую константу, в результате окажется только один.
Если есть такой конструктор:
Код

String::String(const char* s, int len) {
m_length = len;
m_str = new char[m_length+1];
strncpy(m_str, s, len);
m_str[len] = 0;
}

то тужно использовать его.
PM   Вверх
borisbn
Дата 25.6.2012, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bass @  25.6.2012,  03:50 Найти цитируемый пост)
А как добавить второй ноль в существующий стринг в студии.....

во-первых, чего-то я поспешил... согласен с math64
во-вторых, в студии нет класса String (именно в этом написании). Возможно есть C++ CLI, но это - уже не Си++.
в-третьих, возможно придётся воспользоваться Си-строками
Код
std::string str = "bla bla";
int str_len = str.length();
char * c_str = new char[ str_len + 2 ];
strcpy( c_str, str.c_str() );
c_str[ str_len + 1 ] = 0;




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
586
Дата 25.6.2012, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Нулевой символ в std::string можно так можно добавить:
Код
std::string Buffer = "bla bla";
Buffer += '\0';


И кстати, в VCL тоже можно нулевой символ таким способом добавить, при этом строка после этого работает исправно:
Код
#include <vcl.h>
#include <iostream>

int main(int argc, char* argv[])
{
    String s;
    s += '\0';
    std::cout << s.Length() << ' ';
    s += "a";
    std::cout << s.Length() << ' ';

    std::cin.get();
    return 0;
}


Это сообщение отредактировал(а) 586 - 25.6.2012, 10:30
PM   Вверх
bass
Дата 25.6.2012, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(586 @ 25.6.2012,  10:11)
Нулевой символ в std::string можно так можно добавить:
Код
std::string Buffer = "bla bla";
Buffer += '\0';


И кстати, в VCL тоже можно нулевой символ такум способом добавить, при этом строка после этого работает исправно:
Код
#include <vcl.h>
#include <iostream>

int main(int argc, char* argv[])
{
    String s;
    s += '\0';
    std::cout << s.Length() << ' ';
    s += "a";
    std::cout << s.Length() << ' ';

    std::cin.get();
    return 0;
}

Спасибо.......

Полностью с тобой согласен что ввыше описанной конструкции будет три нуля......  Просто это не затрагивало вопрос ...... А вот за 
Код

Buffer += '\0';

Огромное спасибо..... В VCL я вот так делаю 100% работает....
Код

Buffer.SetLength(Buffer.Length()+1);

А вот std::string опыта работы мало......




PM MAIL   Вверх
586
Дата 25.6.2012, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bass @  25.6.2012,  11:36 Найти цитируемый пост)
Полностью с тобой согласен что ввыше описанной конструкции будет три нуля......

В какой конструкции? В моей? Откуда три нуля то???
PM   Вверх
bass
Дата 25.6.2012, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(586 @ 25.6.2012,  10:48)
Цитата(bass @  25.6.2012,  11:36 Найти цитируемый пост)
Полностью с тобой согласен что ввыше описанной конструкции будет три нуля......

В какой конструкции? В моей? Откуда три нуля то???

Нет в вот этой.......

Код

String Buffer = "bla bla\0\0";

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


Эксперт
****


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

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



 smile 
Цитата(bass @  25.6.2012,  10:36 Найти цитируемый пост)
В VCL я вот так делаю 100% работает....
Buffer.SetLength(Buffer.Length()+1);

Работает до поры до времени...
SetLength
Цитата

Existing characters in the string are preserved, but the content of newly allocated space is undefined

 smile 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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