Помогите разобраться, видимо с кодовкой
От: Dosent Россия  
Дата: 13.07.15 10:09
Оценка:
Есть код
GetPrivateProfileString("General", "ExeFileServis1", "not data", Text, MAX_LOADSTRING, "./config.ini");

он на ура работает и в переменной Text значение из config.ini.
Но если динамически создать строку код ниже
TCHAR num[10];
TCHAR ExeFileServis[] = ("ExeFileServis");
itoa(1,num,10);
GetPrivateProfileString("General", strcat(ExeFileServis,num), "not data", Text, MAX_LOADSTRING, "./config.ini");

то код не работает. подозреваю что не так передачей параметров. но что и как решить.
Сердце мудрого делает язык его мудрым и умножает знание в устах его. ПРИТСОЛО(16,23)
3433606
Re: Помогите разобраться, видимо с кодовкой
От: VTT http://vtt.to
Дата: 13.07.15 10:14
Оценка: +1
Здравствуйте, Dosent, Вы писали:

D>Есть код

D>
D>GetPrivateProfileString("General", "ExeFileServis1", "not data", Text, MAX_LOADSTRING, "./config.ini");
D>

D>он на ура работает и в переменной Text значение из config.ini.
D>Но если динамически создать строку код ниже
D>
D>TCHAR num[10];
D>TCHAR ExeFileServis[] = ("ExeFileServis");
D>itoa(1,num,10);
D>GetPrivateProfileString("General", strcat(ExeFileServis,num), "not data", Text, MAX_LOADSTRING, "./config.ini");
D>

D>то код не работает. подозреваю что не так передачей параметров. но что и как решить.

strcat(ExeFileServis,num) — вы дописываете в выделенный на стеке массив фиксированной длины ExeFileServis — классический buffer overrun
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[2]: Помогите разобраться, видимо с кодовкой
От: Dosent Россия  
Дата: 13.07.15 10:18
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Здравствуйте, Dosent, Вы писали:


D>>Есть код

D>>
D>>GetPrivateProfileString("General", "ExeFileServis1", "not data", Text, MAX_LOADSTRING, "./config.ini");
D>>

D>>он на ура работает и в переменной Text значение из config.ini.
D>>Но если динамически создать строку код ниже
D>>
D>>TCHAR num[10];
D>>TCHAR ExeFileServis[] = ("ExeFileServis");
D>>itoa(1,num,10);
D>>GetPrivateProfileString("General", strcat(ExeFileServis,num), "not data", Text, MAX_LOADSTRING, "./config.ini");
D>>

D>>то код не работает. подозреваю что не так передачей параметров. но что и как решить.

VTT>strcat(ExeFileServis,num) — вы дописываете в выделенный на стеке массив фиксированной длины ExeFileServis — классический buffer overrun

Насколько я понимаю я не дописываю а возвращаю значение функцией strcat()

Функция strcat() присоединяет к строке str1 копию строки str2 и завершает строку str1 нулевым символом. Конечный нуль-символ, первоначально завершающий строку str1, перезаписывается первым символом строки str2. Строка str2 при этом не изменяется. Если заданные массивы перекрываются, поведение функции strcat() не определено.

Сердце мудрого делает язык его мудрым и умножает знание в устах его. ПРИТСОЛО(16,23)
3433606
Re[3]: Помогите разобраться, видимо с кодовкой
От: Dosent Россия  
Дата: 13.07.15 10:23
Оценка:
Здравствуйте, Dosent, Вы писали:

D>Здравствуйте, VTT, Вы писали:


VTT>>Здравствуйте, Dosent, Вы писали:


D>>>Есть код

D>>>
D>>>GetPrivateProfileString("General", "ExeFileServis1", "not data", Text, MAX_LOADSTRING, "./config.ini");
D>>>

D>>>он на ура работает и в переменной Text значение из config.ini.
D>>>Но если динамически создать строку код ниже
D>>>
D>>>TCHAR num[10];
D>>>TCHAR ExeFileServis[] = ("ExeFileServis");
D>>>itoa(1,num,10);
D>>>GetPrivateProfileString("General", strcat(ExeFileServis,num), "not data", Text, MAX_LOADSTRING, "./config.ini");
D>>>

D>>>то код не работает. подозреваю что не так передачей параметров. но что и как решить.

VTT>>strcat(ExeFileServis,num) — вы дописываете в выделенный на стеке массив фиксированной длины ExeFileServis — классический buffer overrun

D>Насколько я понимаю я не дописываю а возвращаю значение функцией strcat()
D>

D>Функция strcat() присоединяет к строке str1 копию строки str2 и завершает строку str1 нулевым символом. Конечный нуль-символ, первоначально завершающий строку str1, перезаписывается первым символом строки str2. Строка str2 при этом не изменяется. Если заданные массивы перекрываются, поведение функции strcat() не определено.

согласен. вопрос снят. читай внимательнее справку.
Сердце мудрого делает язык его мудрым и умножает знание в устах его. ПРИТСОЛО(16,23)
3433606
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.