Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: С++ - строки
 
 автор: Евгений Петров   (06.05.2006 в 16:16)   письмо автору
 
 

Скажите почему сия программа выводит no?
#include <iostream>

using namespace std;

void main() 
{
    char * str = new char[1];
    str[0] = '\0';
    if(str == "\0") 
        cout << "yes\n";
    else
        cout << "no\n";
}

   
 
 автор: Trianon   (06.05.2006 в 16:21)   письмо автору
 
   для: Евгений Петров   (06.05.2006 в 16:16)
 

потому что адреса динамически распределенного new char[1] и константной строки "\0" - разные.

   
 
 автор: Евгений Петров   (06.05.2006 в 16:37)   письмо автору
 
   для: Trianon   (06.05.2006 в 16:21)
 

А чему тогда в моем случае равна строка str?

Дописал:
Т.е. в этой строке:
if(str == "\0")

сравниваются не строки а адреса?

   
 
 автор: Trianon   (06.05.2006 в 16:56)   письмо автору
 
   для: Евгений Петров   (06.05.2006 в 16:37)
 

char * - это не строка. Формально, это указатель на символ.

   
 
 автор: Евгений Петров   (06.05.2006 в 17:11)   письмо автору
 
   для: Trianon   (06.05.2006 в 16:56)
 

Хм, понятно, но тогда приведу конкретный пример:
#include <iostream>

using namespace std;

void main() 
{
    char * str = "string";
    char * buffer = "";
    
    for(int i = 0; i < 6; i++)
    {
        // ... buffer += str[i];
    }
}

Вот в том цикле мне надо прибавит к buffer один символ из str. Как это можно сделать?

   
 
 автор: cheops   (06.05.2006 в 20:24)   письмо автору
 
   для: Евгений Петров   (06.05.2006 в 17:11)
 

У вас под buffer память не выделена - перепашите соседнюю область памяти и программа может рухнуть... лучше установите указатель buffer на str и отсеките \0 то, что вам не требуется, в результате даже цикл не понадобится.
#include <iostream> 
using namespace std; 
void main() 

    char * str = "string"; 
    char * buffer; 
    buffer = str
    buffer[6] = '\0';
}

А лучше расскажите, что хотите сделать?

   
 
 автор: Евгений Петров   (06.05.2006 в 21:13)   письмо автору
 
   для: cheops   (06.05.2006 в 20:24)
 

Нет в том то и дело, что мне надо в цикле прибавлять по одному символу. Просто данные хранятся в текстовом файле в таком виде:
a1      asd3 67 sdsd

Т.е. могут быть отделены либо пробелом (причем не одним) либо табом... Мне надо занести в список (List<char *, char *>) все эти элемены

   
 
 автор: cheops   (06.05.2006 в 21:46)   письмо автору
 
   для: Евгений Петров   (06.05.2006 в 21:13)
 

Список сами реализовывали или воспользовались STL?

   
 
 автор: Евгений Петров   (06.05.2006 в 22:47)   письмо автору
 
   для: cheops   (06.05.2006 в 21:46)
 

Нет не сам. Стандартный класс MFC - CList

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования