IN In::checkIn(IN& in)
{
unsigned char *checkText = in.text;
unsigned char *newText;
unsigned short index=0,temp=0,k=0;
for (int i = 0; i < strlen((char*)checkText); i++) {
if (checkText[i] == ' ') {
if (k == 0) continue;
if (checkText[i] == ' ') continue;
}
newText[k] = checkText[i];
k++;
}
return in;
}
Данная функция должна записывать в строку newText
строку checkText
без пробелов. Но при компиляции вылазит
Ошибка C4700 использована неинициализированная локальная переменная "newText".
Как тогда её инициализировать?
Что такое у вас newText
? Судя по всему, строка. Куда вы хотите писать ваши unsigned char
вот здесь?
newText[k] = checkText[i];
Сейчас - в некоторое случайное место в памяти.
А как инициализировать? Сделать так, чтоб она указывала на корректное, нужное вам место в памяти. Я же не могу знать, что вы хотите, смысл ваших действий... Может, надо выделить память динамически, может, передать указатель через аргумент функции - это решаете вы.
Чтоб компилятор просто заткнулся и не кричал, достаточно
unsigned char *newText = nullptr;
но, думаю, вы понимаете, что это глупое решение :)
почему бы просто не использовать класс string Ответ выше звучит исчерпывающе) вы создаете указатель unsigned char newText; но не инициализируйте его (оно не инициализируется NULL по умолчанию) выходит ссылается на случайный участок памяти. Вам необходимо направить это на какой либо массив в случае хранения данных количество которых не превышает strlen((char)checkText) можно просто .... код не совсем понятен для чего вам вообще нужен вы делаете в него как бы запись но в логике это не используется ... мне кажется у вас немного страдает архитектура функции.
Вы должны были инициализировать указатель. наверняка он должен указывать на массив имеющий достаточный размер для помещения текста без пробелов. Но у вас не только ошибка компиляции, а вся логика кода. Долго рассказывать что и почему неправильно, я просто покажу как легче добиться этого без дополнительных массивов и указателей, т.е. как убрать пробелы из массива символов:
IN In::checkIn(IN& in)
{
const size_t size = strlen(in.text);
size_t k = 0;
for (int i = 0; i < size; ++i) {
if (in.text[i] != ' ') {
in.text[k++] = in.text[i];
}
}
//и поставим завершающий символ в свое место
in.text[k] = '\0';
//если для массива выделена память из кучи,
//и память критична, то можно выделить новую
//копировать, а потом удалять старый
return in;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня в файловой системе все данные хранятся в ОЗУЯ создал папку, в которую скопировал файл
Каким образом можно организовать отслеживание кнопок плей/пауза, громкость +/- блютуз гарнитуры? Заметил что в UWP приложениях отслеживание...