Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2010, 00:17   #1
kin63camapa
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 48
По умолчанию странная работа функции strcat()

при выполнии инструкция

Код:
strcat(strcat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:18pt; font-weight:600; color:#362ad5;\">R</span><span style=\" font-size:18pt; font-weight:600; color:#0600bc;\">e</span><span style=\" font-size:18pt; font-weight:600; color:#1018bc;\">m</span><span style=\" font-size:18pt; font-weight:600; color:#1400ab;\">i</span><span style=\" font-size:18pt; font-weight:600; color:#00007f;\">n</span><span style=\" font-size:18pt; font-weight:600; color:#191b7a;\">d</span><span style=\" font-size:18pt; font-weight:600; color:#090a54;\">e</span><span style=\" font-size:18pt; font-weight:600; color:#ff00fb;\">\320\257</span></p>\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:9pt; font-weight:600; color:#ac46df;\">v ",program_version),"</span></p></body></html>");
приводит к краху приложения независимо от компиля и ос
kin63camapa вне форума Ответить с цитированием
Старый 05.04.2010, 00:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну так правильно, куда оно запишет новую строку?
в конец первой...которая не может быть константной, а должна быть выделена динамически и включать нужный размер под обе строки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.04.2010, 10:19   #3
kin63camapa
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 48
По умолчанию

сделал так
Код:
char rem_lab[] = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:18pt; font-weight:600; color:#362ad5;\">R</span><span style=\" font-size:18pt; font-weight:600; color:#0600bc;\">e</span><span style=\" font-size:18pt; font-weight:600; color:#1018bc;\">m</span><span style=\" font-size:18pt; font-weight:600; color:#1400ab;\">i</span><span style=\" font-size:18pt; font-weight:600; color:#00007f;\">n</span><span style=\" font-size:18pt; font-weight:600; color:#191b7a;\">d</span><span style=\" font-size:18pt; font-weight:600; color:#090a54;\">e</span><span style=\" font-size:18pt; font-weight:600; color:#ff00fb;\">\320\257</span></p>\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:9pt; font-weight:600; color:#ac46df;\">v ";
char rem_lab_end[] = "</span></p></body></html>";
strcat(rem_lab,program_version);
strcat(rem_lab,rem_lab_end);
теперь программа падает/не собирается(в зависимости от компиля) при попытке использовать rem_lab например

Код:
about_image_label->setText(QApplication::translate("about_dialog",rem_lab, 0, QApplication::UnicodeUTF8));
вызывает падение программы, притом если ошибка происходит при сборке(обычно в винде) линкер возвращает 1 даж не обьяснив из за чего собственно проблема, хотя компиль кушает это без проблем.

Последний раз редактировалось kin63camapa; 05.04.2010 в 10:34.
kin63camapa вне форума Ответить с цитированием
Старый 05.04.2010, 12:10   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2kin63camapa
естественно. в rem_lab ты уже ничего не добавишь, ибо память выделилась под строку при инициализации, и размер уже не изменить.

Код:
char rem_lab[] = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\np, li { white-space: pre-wrap; }\n</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:18pt; font-weight:600; color:#362ad5;\">R</span><span style=\" font-size:18pt; font-weight:600; color:#0600bc;\">e</span><span style=\" font-size:18pt; font-weight:600; color:#1018bc;\">m</span><span style=\" font-size:18pt; font-weight:600; color:#1400ab;\">i</span><span style=\" font-size:18pt; font-weight:600; color:#00007f;\">n</span><span style=\" font-size:18pt; font-weight:600; color:#191b7a;\">d</span><span style=\" font-size:18pt; font-weight:600; color:#090a54;\">e</span><span style=\" font-size:18pt; font-weight:600; color:#ff00fb;\">\320\257</span></p>\n<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:9pt; font-weight:600; color:#ac46df;\">v ";
char rem_lab_end[] = "</span></p></body></html>";

int len = strlen(rem_lab) + strlen(program_version) + strlen(rem_lab_end) + 1;
char *dest = (char *) malloc(len);
sprintf(dest, "%s%s%s", rem_lab, program_version, rem_lab_end);
dest[len] = 0;
printf("%s\n", dest);
не?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 05.04.2010 в 12:12.
pproger вне форума Ответить с цитированием
Старый 05.04.2010, 16:19   #5
kin63camapa
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 48
По умолчанию

ага похоже на то, чет прогнал что по стандарту такой массив не является динамическим(у некоторых компилей он всё-таки постфактум динамический) пасиб
kin63camapa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу подружиться с strcat() i-cpp Общие вопросы C/C++ 2 17.02.2010 20:14
Моя strcat Valter Общие вопросы C/C++ 5 12.02.2010 00:30
strcat larry Win Api 3 20.07.2009 12:44
Странная работа цикла valerij Microsoft Office Excel 5 06.03.2009 16:40
не работает strcat(),strcpy() MeGaTpoH Общие вопросы C/C++ 5 25.01.2009 17:31