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

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

Войти
Регистрация
Восстановить пароль
 
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
#1

String::replace ошибка Structure required on left side of . or .* - C++

23.06.2014, 19:35. Просмотров 573. Ответов 19
Метки нет (Все метки)

Вот собственно код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int _tmain(int argc, _TCHAR* argv[])
{
// Открываем объект ядра "файл"
HANDLE hFile = CreateFile("file.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// Создаем объект ядра "проекция файла"
HANDLE hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
// Проецируем в адресное пространство процесса объект "проекция файла"
PBYTE pbFile = (PBYTE) MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
//Замена
pbFile.replace(pbFile.begin(), pbFile.end(), "1134", "9999");                          
cout << pbFile<< endl;
system("pause");
    return 0;
}
Ошибка Structure required on left side of . or .* в строке
C++
1
pbFile.replace(pbFile.begin(), pbFile.end(), "1134", "9999");
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 19:48     String::replace ошибка Structure required on left side of . or .* #2
Цитата Сообщение от mihalech19 Посмотреть сообщение
String::replace ошибка
pbFile у вас что, строка?
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 19:50  [ТС]     String::replace ошибка Structure required on left side of . or .* #3
Всмысле ? Unsigned char так-то, если я не ошибаюсь
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 20:03     String::replace ошибка Structure required on left side of . or .* #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от mihalech19 Посмотреть сообщение
Unsigned char так-то, если я не ошибаюсь
И при чём зедсь тогда replace()? Это метод класса, и вызывать его должен объект класса(std::string, или какие string вы используете?), а не unsigned char.
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 20:05  [ТС]     String::replace ошибка Structure required on left side of . or .* #5
Может тогда сразу подскажите как из Unsigned char string получить? Буду благодарен)
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 20:10     String::replace ошибка Structure required on left side of . or .* #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
#include <string>
...
std::string pbFile = (char*) MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 20:14  [ТС]     String::replace ошибка Structure required on left side of . or .* #7
Благодарствую
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 21:41     String::replace ошибка Structure required on left side of . or .* #8
Имейте только в виду, что изменения в string (replace()) никак не отразятся на содержимом файла.

Добавлено через 3 минуты
Чтобы изменения происходили в файле, нужно работать непосредственно с указателем, который возвращает MapViewOfFile().
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 22:25  [ТС]     String::replace ошибка Structure required on left side of . or .* #9
Насколько я знаю, MapViewOfFile возвращает указатель на блок памяти. Как можно напрямую работать с этим блоком?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 22:31     String::replace ошибка Structure required on left side of . or .* #10
Цитата Сообщение от mihalech19 Посмотреть сообщение
Как можно напрямую работать с этим блоком?
Через указатель
Цитата Сообщение от alsav22 Посмотреть сообщение
который возвращает MapViewOfFile().
Приводится указатель к указателю на char (как в первом посте), дальше работа с этой строкой (как с Си-строкой). Размер её равен размеру файла:
C++
1
DWORD fileSize = GetFileSize(hFile, NULL);
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 23:03  [ТС]     String::replace ошибка Structure required on left side of . or .* #11
Приводится указатель к указателю на char
Это как:
C++
1
 string *pbFile = (char*) MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
или, скорее всего, я не понял о чем речь(
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 23:25     String::replace ошибка Structure required on left side of . or .* #12
C++
1
char* pbFile = (char*) MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, 0);
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 23:30  [ТС]     String::replace ошибка Structure required on left side of . or .* #13
Так, и как использовать это например с той же replace? Да я чайник(
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 23:38     String::replace ошибка Structure required on left side of . or .* #14
Цитата Сообщение от mihalech19 Посмотреть сообщение
Так, и как использовать это например с той же replace?
Да никак. Я же написал:
Цитата Сообщение от alsav22 Посмотреть сообщение
дальше работа с этой строкой (как с Си-строкой).
Если в конце нет '\0' (без понятия, как там делается при мапировании), то:
Цитата Сообщение от alsav22 Посмотреть сообщение
Размер её равен размеру файла:
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 23:46  [ТС]     String::replace ошибка Structure required on left side of . or .* #15
Аааа, у меня уже паника)
дальше работа с этой строкой (как с Си-строкой).
С какой "этой" строкой. Я вообще запутался
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.06.2014, 23:53     String::replace ошибка Structure required on left side of . or .* #16
Си-строка - массив char c '\0' в конце.
http://www.cplusplus.com/reference/cstring/
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
23.06.2014, 23:58  [ТС]     String::replace ошибка Structure required on left side of . or .* #17
Ладно, разберусь. И еще такой вопрос: кодировка не поменяется в файле после всех нужных манипуляций?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.06.2014, 00:11     String::replace ошибка Structure required on left side of . or .* #18
Не поменяется.
mihalech19
3 / 3 / 2
Регистрация: 23.06.2014
Сообщений: 126
24.06.2014, 00:15  [ТС]     String::replace ошибка Structure required on left side of . or .* #19
Глянь плз
При чтении dll библиотеки в обычном(не бинарном) виде, чтение прерывается на NULL
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2014, 08:20     String::replace ошибка Structure required on left side of . or .*
Еще ссылки по теме:

C++ [Error] lvalue required as left operand of assignment
C++ Error: lvalue required as left operand of assignment. Не могу разобраться где ошибка
C++ Ошибка при компиляции Illegal structure operation
Ошибка: lvalue required as left operand of assignment C++
C++ Error: lvalue required as left operand of assignment|

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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1785 / 1160 / 225
Регистрация: 16.05.2013
Сообщений: 3,056
Записей в блоге: 5
Завершенные тесты: 1
24.06.2014, 08:20     String::replace ошибка Structure required on left side of . or .* #20
Цитата Сообщение от mihalech19 Посмотреть сообщение
C++
1
pbFile.replace(pbFile.begin(), pbFile.end(), "1134", "9999");
Так к слову: в классе string нет подходящей сигнатуры для replace. Смотрим тут http://www.cplusplus.com/reference/s...tring/replace/
Yandex
Объявления
24.06.2014, 08:20     String::replace ошибка Structure required on left side of . or .*
Ответ Создать тему
Опции темы

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