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

WriteFile - C++

Восстановить пароль Регистрация
 
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
25.02.2013, 19:05     WriteFile #1
есть к примеру строка:
string h = "2 3\r\n";

как можно переменную h использовать в WriteFile:


Вот так работает: WriteFile(... , "2 3\r\n" , h.length()-1, ... ,NULL);

А так WriteFile(... , h , h.length(), ... ,NULL); нет.
Ну, это и понятно, нужно использовать указатели, например, так:
char buf[100];
*buf = s[0];
WriteFile(... , buf , h.length()-1, ... ,NULL);

но тоже не работает?
Помогите разобраться, в чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2013, 19:05     WriteFile
Посмотрите здесь:

WriteFile C++ Builder
C++ Com port (writefile кривая работа)
WriteFile - ERROR_INVALID_USER_BUFFER C++ WinAPI
Функция WriteFile C++ WinAPI
[C] ReadFile/WriteFile C++
ReadFile и WriteFile Visual C++
Почему WriteFile не отправляет сообщение по каналу Pipe C++
Writefile() & String - В контроллер приходит не то, что было отправлено C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
25.02.2013, 20:02     WriteFile #2
Вы пытаетесь сохранить один тип данных (string), а записать обратно совсем другой (char). То, что h.length() показывает размер используемых символов не означает, что он зарезервировал именно это количество байт, он может зарезервировать и больше. Лучше всего использовать структуру с чётким выделеным количеством памяти и одинаковыми типами например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <fstream>
 
int main ()
{
    char str1[12] = "Hello world";
    char str2[12];
 
    std::ofstream out("tmp.dat", std::ios::out | std::ios::binary);
    out.write(reinterpret_cast<char*>(str1), sizeof(str1));
    out.close();
 
    std::ifstream in("tmp.dat", std::ios::in | std::ios::binary);
    in.read(reinterpret_cast<char*>(str2), sizeof(str2));
    in.close();
 
    std::cout << str2 << '\n';
    
    return 0;
}
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
25.02.2013, 20:48  [ТС]     WriteFile #3
Извините, но это не то. Мне нужно именно через WriteFile, чтобы разобраться с этим:
Перехват потоков ввода/вывода
Yandex
Объявления
25.02.2013, 20:48     WriteFile
Ответ Создать тему
Опции темы

Текущее время: 23:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru