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

Не записывает структуру в файл - C++

Восстановить пароль Регистрация
 
Jinanton
3 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 53
10.01.2014, 19:27     Не записывает структуру в файл #1
Здравствуйте, вот собственно код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct mystruct {
    double i;
    char color[10];
    char material[10];
};
 
int main(int argc, char* argv[])
{
 
    mystruct ms;
    memset(&ms, 0, sizeof ms);
    ms.i = 1;
    strcpy_s(ms.color, "черный");
    strcpy_s(ms.material, "дерево");
    errno_t file;
    FILE * pFile;
    file = fopen_s(&pFile, "file.dat", "wb");
    fwrite(&ms, sizeof(mystruct), 1, pFile);
    fclose(pFile);
    _getch();
    return 0;
}
После его выполнения, а выполняется он без ошибок, файл file.dat остается пустым... Почему?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 19:27     Не записывает структуру в файл
Посмотрите здесь:

C++ Не записывает в файл
C++ Не записывает в файл
Не записывает ничего в файл C++
C++ Не записывает в файл
C++ не записывает в файл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 19:32     Не записывает структуру в файл #2
Мне кажется что в этой строчке ошибка, но не уверен
Цитата Сообщение от Jinanton Посмотреть сообщение
file = fopen_s(&pFile, "file.dat", "wb");
pFile - указатель и от него еще берется адрес &pFile
Jinanton
3 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 53
10.01.2014, 19:36  [ТС]     Не записывает структуру в файл #3
Цитата Сообщение от xoror Посмотреть сообщение
pFile - указатель и от него еще берется адрес &pFile
Нет, тут ошибки нет 100%, это причуда VS, и лично я это расцениваю как "привязку" к среде... использовалось неоднакротно
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 19:48     Не записывает структуру в файл #4
Jinanton, вот работающая программа (проверено)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <stdio.h>
 
struct mystruct {
    double i;
    char color[10];
    char material[10];
};
 
int main()
{
    mystruct ms;
 
    ms.i = 1;
    strcpy(ms.color, "черный");
    strcpy(ms.material, "дерево");
 
    FILE *pFile;
    pFile = fopen("file.dat", "wb");
    fwrite(&ms, sizeof(ms), 1, pFile);
    fclose(pFile);
 
    system("pause");
    return 0;
}
Запись в файл сделал через другую функцию
Jinanton
3 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 53
10.01.2014, 20:06  [ТС]     Не записывает структуру в файл #5
В какой среде делал?
P.S. когда начал только писать прогу так и написал, правда я всегда использую _getch() а не паузу, однако VS 2013 версии не работает с такими командами как strcpy и fopen, и требует поменять их на strcpy_s и fopen_s...

Добавлено через 2 минуты
блин я без понятия как тут ответ адресовать...
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 20:09     Не записывает структуру в файл #6
Цитата Сообщение от Jinanton Посмотреть сообщение
В какой среде делал?
В CodeBlocks

Я еще не сталкивался с функциями, которые заканчиваются _s. Так что не знаю почему та программа не работает)

Добавлено через 1 минуту
Цитата Сообщение от Jinanton Посмотреть сообщение
блин я без понятия как тут ответ адресовать...
Можно мышкой кликнуть по нику или выделить текст и потом появится надпись "Цитировать"
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
10.01.2014, 20:12     Не записывает структуру в файл #7
Цитата Сообщение от Jinanton Посмотреть сообщение
однако VS 2013 версии не работает с такими командами как strcpy и fopen, и требует поменять их на strcpy_s и fopen_s...
Чтобы работала: Ошибка в SCANF
Jinanton
3 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 53
10.01.2014, 20:16  [ТС]     Не записывает структуру в файл #8
xoror, скомпилил твой код в 2010 версии, работает, у тебя с мусором записывает? ну и логичный вопрос как после strcpy добавить '\0', если заведомо не известно какой длины значение будет?
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 20:21     Не записывает структуру в файл #9
Цитата Сообщение от Jinanton Посмотреть сообщение
у тебя с мусором записывает?
С мусором, но это так и должно быть. Потому что создается двоичный файл

Цитата Сообщение от Jinanton Посмотреть сообщение
как после strcpy добавить '\0', если заведомо не известно какой длины значение будет?
Функция strcpy() сама добавит '\0' в конце

Но если очень надо добавить '\0' тогда так
C++
1
ms.color[9] = '\0';
В конце строки записывается 0
Jinanton
3 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 53
10.01.2014, 20:34  [ТС]     Не записывает структуру в файл #10
xoror, до конца строки все равно будет мусор, так потом при считывании мусор тоже останется...
_lunar_
Graphics API Developer
1197 / 1123 / 76
Регистрация: 03.05.2011
Сообщений: 2,741
10.01.2014, 20:36     Не записывает структуру в файл #11
Цитата Сообщение от xoror Посмотреть сообщение
Я еще не сталкивался с функциями, которые заканчиваются _s.
на примере memcpy_s (с wiki)
Чтобы не выполнять лишних действий, функция memcpy() не проверяет соответствие размера выходного буфера количеству копируемых байт, возлагая эту обязанность на программиста. В результате совершается достаточно много ошибок, способных привести к переполнению буфера.
Поэтому ближе к концу 2009 г. компания Microsoft добавила memcpy(), CopyMemory() и RtlCopyMemory() в список функций, запрещённых в соответствии с методикой разработки безопасных программ Secure Development Lifecycle (SDL). Те разработчики, которые хотят создавать совместимые с SDL приложения, должны будут использовать вместо memcpy() функцию memcpy_s, позволяющую указывать размер буфера. Функция memcpy_s() непереносима и не включена в стандарт Си.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 20:44     Не записывает структуру в файл
Еще ссылки по теме:

C++ В файл не записывает массив
Не записывает в файл? C++
Не записывает в файл C++

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

Или воспользуйтесь поиском по форуму:
xoror
 Аватар для xoror
29 / 31 / 2
Регистрация: 15.12.2013
Сообщений: 147
10.01.2014, 20:44     Не записывает структуру в файл #12
Цитата Сообщение от _lunar_ Посмотреть сообщение
на примере memcpy_s (с wiki)
Спасибо. Мне надо как-нибудь взяться и почитать об этом. Уже сколько раз видел такие функции _s. Но в чем их отличия не понимал

Jinanton, чтобы не было мусора, можно всю структуру обнулить с помощью memset(&ms, 0, sizeof ms);
Yandex
Объявления
10.01.2014, 20:44     Не записывает структуру в файл
Ответ Создать тему
Опции темы

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