Есть код
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");
то код не работает. подозреваю что не так передачей параметров. но что и как решить.
Здравствуйте, 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
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Здравствуйте, 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() не определено.
Здравствуйте, 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() не определено.
согласен. вопрос снят. читай внимательнее справку.