Товарищи,ситуация такая : у меня есть файл json в котором описана структура. Функция ReadEntrants читает файл и возвращает строку wchar_t. Далее функция ParseEntrants принимает строку которую я считал из файла и записывает данные в поля структуры.Так же есть функция которая выводит структуру в файл и оформляет в виде таблицы ( скрин приложен). как видно с полем Name все хорошо,а вот в поле Phone всегда в конец добавляется мусор вроде символов 'd' или 'Z'. в чем ошибка ?
struct Entrant
{
wchar_t Name[30];
wchar_t Phone[10];
int Estimates[4];
};
wchar_t *StrToWideStr(char *str)// делает из char wchar_t
{
size_t length = StrLength(str);
size_t converted = 0;
wchar_t *newArr = new wchar_t[length + 1];
converted = mbstowcs(newArr, str, length + 1);
if (converted != length)
return nullptr;
return newArr;
}
wchar_t *SkipUnnecessarySymbols(wchar_t *wstr)// передвигает указатель на следующий символ после ':'
{
int index = 0;
while (*wstr)
{
if (wstr[index] == ':')
return wstr + index+1;
++index;
}
return nullptr;
}
char *ReadEntrants(char *filePath) // считываю структуры из файла в строку char
{
FILE *ptrFile = fopen(filePath, "rt");
if (ptrFile == nullptr)
return nullptr;
fseek(ptrFile, 0, SEEK_END); // GetFileSize
long fileSize = ftell(ptrFile);
rewind(ptrFile);
char *buffer = new char[fileSize+1];
auto readed = fread(buffer, 1, fileSize, ptrFile);
buffer[readed] = 0;
fclose(ptrFile);
return buffer;
}
void ParseEntrants(Entrant *arrOfstruct, wchar_t *str, int i)
{
for (int k = 0; k < 4; ++k)
{
swscanf(str, L"%d", &arrOfstruct[i].Estimates[k]);
if (k == 3)
break;
str = SearchDilim(str);
}
}
Entrant *ParseEntrants(wchar_t *str, int &count)
{
count = CountOfSructs(str); //считает кол-во структур в строке wchar_t
Entrant *arrOfstruct = new Entrant[count];
for (int numberOfStruct = 0; numberOfStruct < count; ++numberOfStruct)
{
str = SkipUnnecessarySymbols(str) + 1;
swscanf(str, L"%[^\"]s", &arrOfstruct[numberOfStruct].Name);
str = SkipUnnecessarySymbols(str);
swscanf(str, L"%[0-9]s", &arrOfstruct[numberOfStruct].Phone);
str = SkipUnnecessarySymbols(str) + 1;
ParseEntrants(arrOfstruct, str, numberOfStruct);
}
return arrOfstruct;
}
В массив wchar_t Phone[10] для телефонных записей записывается 10-значный номер телефона. Это не оставляет места для терминального нуля и при выводе приводит к появлению мусора. Решение заключается в увеличении размерности массива до 11 элементов.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый день, у меня проблема не могу вытащить слайдер товаров из этой бутcтреповской темыПереношу в проект css и скрипты master-slider, но все равно...
Возник следующий вопрос: сервис продает определенные услугиУ каждой услуги есть несколько цен со своим сроком действия
Всем привет! Есть кластер (2 ноды + 1 арбитратор)Запросы на него идут через maxscale proxy, настроенную таким образом, чтобы все запросы (и чтения и записи)...