jenya7 |
---|
fwrite (file_params[i].text , sizeof(char), sizeof(file_params[i].text), system_files[i]);
|
sizeof(file_params[i].text) = sizeof(char*) = 4 (на типичной 32-битной платформе) или 8 (на типичной 64-битной платформе). Вместо sizeof надо использовать функцию strlen.
jenya7 |
---|
typedef struct
{
char *name;
char *text;
}FILE_PARAM;
|
Раз уж поля name и text указывают на строковые литералы, то лучше добавить const:
const char* name;
const char* text;
jenya7 |
---|
void SYS_FILES_Init(void)
{
int i;
for (i = 0; i< 16; i++)
{
system_files[i] = fopen(file_params[i].name, "w+");
fwrite (file_params[i].text , sizeof(char), sizeof(file_params[i].text), system_files[i]);
fclose (system_files[i]);
}
}
|
Если так делать, то глобальный массив system_files вообще не нужен, достаточно локальной переменной:
#define LEN(array) (int)(sizeof(array) / sizeof(array[0]))
void SYS_FILES_Init(void)
{
FILE* f;
int i;
for (i = 0; i< LEN(file_params); i++)
{
f = fopen(file_params[i].name, "w+");
fwrite (file_params[i].text , sizeof(char), strlen(file_params[i].text), f);
fclose (f);
}
}