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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 08:00   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Почему в конце, строки записанной в файл, появляется пробел?

Почему в конце, строки записанной в файл, появляется пробел?
Код:
#include <windows.h>

///////////////////////////////////////////////////////////////////////////////////////////////
// Демонстрационная программа работы с файлами (чтение, запись) из книги Румянцева П.В.
// "Работа с файлами в Win32 API", страница 120
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
//   char cBuffer[0x400];
   char cDirectoryBuffer[0x400];
   char cTextBuffer[] = {"Синьора Спагетти, рождённая в Пизе,\r\n\
Любила висеть босиком на карнизе."};
   HANDLE hFile;
   DWORD dwBytes;
//   int i;

   // Определяем текущую директорию и запоминаем её в
   // массиве cDirectoryBuffer
   GetCurrentDirectory(0x400, cDirectoryBuffer);
   // Создаём директорию в которой будем производить все манипуляции
   CreateDirectory("c:\\DemoDirectoryForBook", NULL);
   // Делаем вновь созданную директорию текущей
   SetCurrentDirectory("c:\\DemoDirectoryForBook");
   // Создаём файл, в который мы сбросим данные
   hFile = CreateFile( "TestFile.txt",
                        GENERIC_WRITE,
                        FILE_SHARE_READ,
                        NULL,
                        CREATE_NEW,
                        FILE_ATTRIBUTE_NORMAL,
                        NULL);
   if (INVALID_HANDLE_VALUE == hFile) {
      MessageBox(NULL, "Cannot create file", "Error", MB_OK);
      return 0;
   }
   // Записываем данные в файл
   WriteFile(hFile, cTextBuffer, sizeof(cTextBuffer), &dwBytes, NULL);
   // Закрываем файл
   CloseHandle(hFile);

   return 1;
}
8Observer8 вне форума Ответить с цитированием
Старый 24.01.2011, 16:51   #2
reynevan
Пользователь
 
Регистрация: 15.07.2010
Сообщений: 35
По умолчанию

я вместо sizeof использовал lstrlen. sizeof же всегда на 1 больше указывает. Или искусственно -1 ставь
reynevan вне форума Ответить с цитированием
Старый 24.01.2011, 17:32   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Спасибо! Да, действительно. Проверил. Буду знать. Видимо терминатор '\0' учитывается.

Код:
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
//  Тестирование sizeof и strlen
int main () {
   char cTextBuffer[] = "12345";

   cout << "sizeof(cTextBuffer) =  " << sizeof(cTextBuffer) << endl;
   cout << "strlen(\"12345\") =  " << strlen("12345") << endl;

   system("Pause");
   return 0;
}
Результат работы программы:
sizeof(cTextBuffer) = 6
strlen("12345") = 5
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Знак переноса строки в конце строки. Kalika Microsoft Office Access 2 12.09.2010 11:27
Знак в конце строки таблицы VistaSV30 Microsoft Office Word 1 02.02.2010 21:29
Помогите пожалуйста, программа работает, но почему-то в конце не выводит получившуюся матрицу... Dead Romantic Помощь студентам 6 11.12.2009 19:03
Почему при исключении showmessage() их цикла появляется ошибка? (Delphi) marina15056 Помощь студентам 4 25.06.2009 14:30
Почему появляется цикл? valerij Microsoft Office Excel 11 11.02.2009 00:20