подскажите почему падает программа PHP: char *Text[5]; char *Textre = "Rus"; Text[4] = ""; sprintf( Text[4], "zzz/%s/ggg", Textre ); printf("%s",Text[4] );
ты опредиляешь массив указателей, но не выделяешь память под текст поэтому прога и будет падать. При таком опредилении под каждый указатель отводится 4/8 байта (х86/х86_64). Юзай malloc() или new[] для выделения памяти.
Нехватает места в Text, при копировании... ну и чуток не верно сам процесс копирования проходит Code: char *Text[5]; char *Textre = "Rus"; Text[3] = ""; sprintf(&Text[3], "zzz/%s/ggg", Textre ); printf("%s", &Text[3]);
Бред полнейший &Text[3] - вот тут ошибка будет, ты адрес адреса получаешь И куда ты писать собираешься? в рельсу? память не выделена, при запуске сразу ексепшин получишь.
Незнаю каким макаром оно у тя "работает" но вот нормальный код: Code: 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); надо делать в конце каждого цикла, или при выходе из цикла ?
Лучше выделить один участок памяти большой, а потом просто рапределить его между элементами макссива. Меньша нагрузки и кода. Логика примерно такая. Иногда жаде помогает при переполнении. т.е. не вызываек краха ) Code: // определяем максимальны размер каждого элемента #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]); // сразу всё убереш за собой