Просмотр полной версии : креш при копировании в char
подскажите почему падает программа
char *Text[5];
char *Textre = "Rus";
Text[4] = "";
sprintf( Text[4], "zzz/%s/ggg", Textre );
printf("%s",Text[4] );
char *Text[5];
ты опредиляешь массив указателей, но не выделяешь память под текст
sprintf( Text[4], "zzz/%s/ggg", Textre );
поэтому прога и будет падать. При таком опредилении под каждый указатель отводится 4/8 байта (х86/х86_64).
Юзай malloc() или new[] для выделения памяти.
Нехватает места в Text, при копировании... ну и чуток не верно сам процесс копирования проходит :)
char *Text[5];
char *Textre = "Rus";
Text[3] = "";
sprintf(&Text[3], "zzz/%s/ggg", Textre );
printf("%s", &Text[3]);
Нехватает места в Text, при копировании... ну и чуток не верно сам процесс копирования проходит
Бред полнейший
&Text[3] - вот тут ошибка будет, ты адрес адреса получаешь
И куда ты писать собираешься? в рельсу? память не выделена, при запуске сразу ексепшин получишь.
razb, прежде чем сюда постить какой-либо код, я его проверяю.
Незнаю каким макаром оно у тя "работает" но вот нормальный код:
char* buffer = (char *)malloc(100 * sizeof(char));
char text[] = "Hello world";
memset(buffer, '\0', 100 * sizeof(char));
sprintf(buffer, "%s", text);
printf("%s\n", buffer);
free(buffer);
Незнаю каким макаром оно у тя "работает" но вот нормальный код:
char* buffer = (char *)malloc(100 * sizeof(char));
char text[] = "Hello world";
memset(buffer, '\0', 100 * sizeof(char));
sprintf(buffer, "%s", text);
printf("%s\n", buffer);
free(buffer);
это конечно хорошо, но мне нужен массив
что бы получать значения для каждого индекса
for( int index = 0; index < 4; ++index )
{
printf("%s", Text[index]);
}
но мне нужен массив
Ну дак выделяй память для каждого элемента массива указателей в цикле и не забудь об освобождении памяти.
razb , спасибо, работает
а free(buffer); надо делать в конце каждого цикла, или при выходе из цикла ?
Ну дак выделяй память для каждого элемента массива указателей в цикле и не забудь об освобождении памяти.
Лучше выделить один участок памяти большой, а потом просто рапределить его между элементами макссива. Меньша нагрузки и кода.
Логика примерно такая.
Иногда жаде помогает при переполнении. т.е. не вызываек краха )
// определяем максимальны размер каждого элемента
#define size 256
// кол-во элементов
#define cnt 5
char *Text[cnt];
char *Textre = "Rus";
Text[0] =malloc(cnt*size);
for (int i=1;i<cnt;i++) Text[i]=(char*)((ULONG)Text[0]+i*size);
....
что нужно делаешь
...
free(Text[0]); // сразу всё убереш за собой
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot