|
13.12.2011, 22:45
|
#1
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Вопрос-Ответ
В коде:
const char tmp_adr[]="../dat/gfx/menu_0.png";
Что вижу при отладке на этой строчке:
tmp_adr[22] - "ММММММММ../dat/gfx/men"
wtf?
Юзаю msvs11.
|
(Offline)
|
|
13.12.2011, 23:11
|
#2
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Вопрос-Ответ
ты залез на память по смещению +22 от начала своей строки
__________________
|
(Offline)
|
|
13.12.2011, 23:29
|
#3
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Вопрос-Ответ
Сообщение от SBJoker
ты залез на память по смещению +22 от начала своей строки
|
Всмысле? Мне это значение даёт дебаггер.
|
(Offline)
|
|
14.12.2011, 00:45
|
#4
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Вопрос-Ответ
Последняя буква у тебя с номером 20, потом ноль, потом мусор.
tmp_adr[22] - доступ к мусору позади строки.
Почему дебагер выдаёт строку трудно сказать должен быть чар.
__________________
|
(Offline)
|
|
14.12.2011, 01:25
|
#5
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Вопрос-Ответ
Я ошибся - значение сначала присваивается нормально, потом:
im_f_t = hge->LoadTexture(tmp_adr);
И вот тут движок hge вылетает, а в дебаге строка забита мусором.
Со стандартными примерами hge тоже самое, так что проблема была в нём.
|
(Offline)
|
|
14.12.2011, 01:51
|
#6
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопрос-Ответ
дебаггер выдает строку потомучто ето массив из 22 чаров, а не 22-й чар.
почему то портится память в hge->LoadTexture(tmp_adr);
|
(Offline)
|
|
14.12.2011, 09:27
|
#7
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Вопрос-Ответ
char* tmp_adr = "mytexture.jpg";
im_f_t = hge->LoadTexture(tmp_adr);
так тоже валится?
или так, смотря че ты там со строкой вытворяешь перед загрузкой..
char *oldname="texture.jpg";
char *newname = new char[strlen(oldname)+1];
strcpy(newname, oldname);
im_f_t = hge->LoadTexture(newname);
или так
char name[255];
sprintf(name,"%s.jpg","texture");//на выходе texture.jpg (динамическое создавание имени файла типа)
Последний раз редактировалось pozitiffcat, 15.12.2011 в 09:38.
|
(Offline)
|
|
14.12.2011, 12:45
|
#8
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Вопрос-Ответ
Сообщение от Nerd96
Юзаю msvs11.
|
Ну дык юзай официальные 2003, 2005, 2008, 2010 и не будет проблем *trollface*
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.12.2011, 15:46
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Вопрос-Ответ
Сообщение от pozitiffcat
char* tmp_adr = "mytexture.jpg";
im_f_t = hge->LoadTexture(tmp_adr);
так тоже валится?
или так, смотря че ты там со строкой вытворяешь перед загрузкой..
char *oldname="texture.jpg";
char *newname = new char[strlen(oldname)];
strcpy(newname, oldname);
im_f_t = hge->LoadTexture(newname);
или так
char name[255];
sprintf(name,"%s.jpg","texture");//на выходе texture.jpg (динамическое создавание имени файла типа)
|
char *newname = new char[strlen(oldname)+1];
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.12.2011, 09:37
|
#10
|
Мастер
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений (для 533 пользователей)
|
Ответ: Вопрос-Ответ
Сообщение от impersonalis
char *newname = new char[strlen(oldname)+1];
|
ах точно, забыл про нуль!
|
(Offline)
|
|
06.06.2012, 18:55
|
#11
|
Чудо-кот
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений (для 1,471 пользователей)
|
Ответ: Вопрос-Ответ
Поссоны, кто-нибудь сталкивался с ошибкой инклуда sdl в tcc?
In file included from D:/Dev/sdl/SDL-1.2.15/test/testwin.c:12:
In file included from ../include/SDL/SDL.h:30:
In file included from ../include/SDL/SDL_main.h:26:
In file included from ../include/SDL/SDL_stdinc.h:155:
../include/SDL/begin_code.h:86: #endif without matching #if
Нашёл ещё сборку sdl специально под tcc, но она тоже не компилится.
|
(Offline)
|
|
07.06.2012, 00:49
|
#12
|
ПроЭктировщик
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений (для 63 пользователей)
|
Ответ: Вопрос-Ответ
мтак и снова проблема...
нужно разделить определенную строку на слова входящая строка string
ни как не могу написать разделение сам алгаритм известен но доступ к частицам строки организовать не получается с char тож самое кому не лень
киньте пример как лучше все это забацать желательно с коментами
строка =
получить в итоге нужно
man
0
1
2
3
т.е не по одному символу разделять а n
в данном случае
{
}
,
__________________
форум эт вещь... и почему я раньше им не пользовался?
AMD Phenom(tm) II X6 3.20GHz 8GB GTX 550(1Gb)
|
(Offline)
|
|
07.06.2012, 09:42
|
#13
|
Дэвелопер
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений (для 886 пользователей)
|
Ответ: Вопрос-Ответ
На счёт "лучше всего" - вопрос не ко мне. Но я вот как делаю на примере с++ билдера:
//функция
TStringList* SplitString(const String s, const char *razd) {
TStringList *list = new TStringList();
if(razd == NULL) {//если разделители не указаны, то возвращаем исходную строку
list->Add(s);
return list;
}
int len = s.Length();
String tmp = "";
bool bRazd;
//пробегаем побуквенно по строке
for(int k=1;k<=len;++k) {
bRazd = false;
for(int j=0;razd[j] != NULL;++j) {//проверка не является ли текущий символ разделителем
if(s[k] == razd[j]) {
bRazd = true;
break;
}
}
if(bRazd == true && tmp != "") { //если разделитель, то предыдущее набранное из букв слово добавляем в список
list->Add(tmp);
tmp = "";
}
else { //иначе набираем слово побуквенно
tmp += s[k];
}
if(k == len && tmp != "") //если достигли последнего символа, то последнее слово тоже в список добавляем
list->Add(tmp);
}
return list;
}
//использоваие
String s = "man{1,2,3,4}";
char razd[] = {'{','}',',',' '};
TStringList *lst = fnSplitString(s, razd);
for(int k=0;k<lst->Count;++k) {
ShowMessage(lst->Strings[k]);
}
delete lst; //необязательно, должно удалиться при выходе из области видимости
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.06.2012, 12:46
|
#14
|
|
Ответ: Вопрос-Ответ
ни как не могу написать разделение сам алгаритм известен но доступ к частицам строки организовать не получается с char тож самое кому не лень
киньте пример как лучше все это забацать желательно с коментами
|
http://www.cplusplus.com/reference/c...string/strtok/
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="man{0,1,2,3}";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,"{},");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, "{},");
}
return 0;
}
запустим ка код http://ideone.com/Mqn65
Splitting string "man{0,1,2,3}" into tokens:
man
0
1
2
3
|
delete lst; //необязательно, должно удалиться при выходе из области видимости
|
хм, в цпп билдере есть сборщик мусора ? память в хипе сама не удаляется (на стеке удаляется)
|
|
|
Сообщение было полезно следующим пользователям:
|
|
07.06.2012, 19:39
|
#15
|
|
Ответ: Вопрос-Ответ
http://ideone.com/ttYDS
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="man{0,1,2,3}\nmanman";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,"{},\n");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, "{},\n");
}
return 0;
}
|
|
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:35.
|