Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2016, 13:12   #1
Никита69
Пользователь
 
Регистрация: 15.11.2015
Сообщений: 13
По умолчанию Разделяемая память C++

Всем привет. Есть некоторый чат между Admin и Users. Возник такой вопрос: почему при отправке, сообщения передаются только до пробела. Т.е если написать "привет users" передается только "привет.
Код:

// ConsoleApplication4.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include<Windows.h>
#include<iostream>
#include <stdio.h>
#include <conio.h>
#include <cstdio>
#include <string.h>
using namespace std;





int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");
	HANDLE hFile, hFileMapping;

	hFileMapping = CreateFileMapping(NULL, NULL, PAGE_READWRITE, 0, 512 * sizeof(char), L"Local\\MyFileMapping 1");
	hFile = CreateFileMapping(NULL, NULL, PAGE_READWRITE, 0, sizeof(int), L"Local\\MyFileMapping 2");

	if (hFileMapping == NULL || hFile == NULL)
	{
		printf("Error creating file mapping");

		return 2;
	}

	if (GetLastError() == ERROR_ALREADY_EXISTS){
		printf("Client\n");
	}
	else{
		printf("Admin\n");
	}

	char *mess = (char*)MapViewOfFile(hFileMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
	int *nom = (int*)MapViewOfFile(hFile, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);


	if (mess == NULL || nom == NULL)
	{
		printf("Error mapping file data");
		CloseHandle(hFileMapping);
		CloseHandle(hFile);
		return 3;
	}


	nom[0] = 1;


	/*if (GetLastError() == ERROR_ALREADY_EXISTS)
	printf("I'm second. you go '0'\n");
	else
	printf("I'm first .you go 'x' \n");*/



	char mass[512];

	int end = 1;

	while (end == 1){

		if (nom[0] % 2 != 0 && GetLastError() != ERROR_ALREADY_EXISTS){

			if (nom[0] > 1){
				cout << "[" << nom[0] - 1 << "]" << "[" << "Client" << "] " << mess << endl;
			}

			cout << "[" << nom[0] << "]" << "[" << "Admin" << "] ";
			cin >> mess;
			if (!strcmp(mess, "/exit")) break;

			gets_s(mass);
			//mess = mass;
			//scanf_s("%s", mess);

			//cout << " " << mess;
			nom[0] = nom[0] + 1;

		}

		if (nom[0] % 2 == 0 && GetLastError() == ERROR_ALREADY_EXISTS){

			if (nom[0] > 1){ cout << "[" << nom[0] - 1 << "]" << "[" << "Admin" << "] " << mess << endl; }
			cout << "[" << nom[0] << "]" << "[" << "Client" << "] ";
			cin >> mess;
			if (!strcmp(mess, "/exit")) break;

			gets_s(mass);
			//mess = mass;
			//cout << " " << mess;
			nom[0] = nom[0] + 1;

		}
		//Sleep(5000);
		//break;
	}





	//if (end == 1){}
	//Sleep(5000);

	CloseHandle(hFileMapping);
	CloseHandle(hFile);

	return 0;
}
Никита69 вне форума Ответить с цитированием
Старый 24.10.2016, 13:54   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Так по дефолту работает cin. Ему можно установить noskipws, но лучше воспользоваться getline
p51x вне форума Ответить с цитированием
Старый 24.10.2016, 14:28   #3
Никита69
Пользователь
 
Регистрация: 15.11.2015
Сообщений: 13
По умолчанию

Где же вы раньше были Спасибо
Забыл еще вопрос дописать, что сделать что бы сообщения передавались на русском языке?
Никита69 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокеты. Разделяемая память. Резкое падение скорости при увеличении размера передаваемого файла. dimoni414 Общие вопросы C/C++ 2 19.05.2016 08:08
Предача файла. Разделяемая память. Заполнение при считывании dimoni414 Общие вопросы C/C++ 2 18.05.2016 18:48
2 проги на С++, потоки и разделяемая память. Salec Фриланс 1 12.06.2013 18:28
Разделяемая память в unix на C Cannibal Помощь студентам 0 07.06.2013 08:28
Разделяемая память Spb Общие вопросы C/C++ 0 25.12.2011 14:49