Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 13.12.2011, 22:45   #1
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 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
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Вопрос-Ответ

ты залез на память по смещению +22 от начала своей строки
__________________
(Offline)
 
Ответить с цитированием
Старый 13.12.2011, 23:29   #3
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ

Сообщение от SBJoker Посмотреть сообщение
ты залез на память по смещению +22 от начала своей строки
Всмысле? Мне это значение даёт дебаггер.
(Offline)
 
Ответить с цитированием
Старый 14.12.2011, 00:45   #4
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Вопрос-Ответ

Последняя буква у тебя с номером 20, потом ноль, потом мусор.
tmp_adr[22] - доступ к мусору позади строки.
Почему дебагер выдаёт строку трудно сказать должен быть чар.
__________________
(Offline)
 
Ответить с цитированием
Старый 14.12.2011, 01:25   #5
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 22.02.2011
Сообщений: 901
Написано 480 полезных сообщений
(для 1,471 пользователей)
Ответ: Вопрос-Ответ

Я ошибся - значение сначала присваивается нормально, потом:
im_f_t = hge->LoadTexture(tmp_adr);
И вот тут движок hge вылетает, а в дебаге строка забита мусором.
Со стандартными примерами hge тоже самое, так что проблема была в нём.
(Offline)
 
Ответить с цитированием
Старый 14.12.2011, 01:51   #6
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопрос-Ответ

дебаггер выдает строку потомучто ето массив из 22 чаров, а не 22-й чар.

почему то портится память в hge->LoadTexture(tmp_adr);
(Offline)
 
Ответить с цитированием
Старый 14.12.2011, 09:27   #7
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 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
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Вопрос-Ответ

Сообщение от Nerd96 Посмотреть сообщение
Юзаю msvs11.
Ну дык юзай официальные 2003, 2005, 2008, 2010 и не будет проблем *trollface*
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (15.12.2011)
Старый 14.12.2011, 15:46   #9
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
pozitiffcat (15.12.2011)
Старый 15.12.2011, 09:37   #10
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Вопрос-Ответ

Сообщение от impersonalis Посмотреть сообщение


 char *newname = new char[strlen(oldname)+1];
ах точно, забыл про нуль!
(Offline)
 
Ответить с цитированием
Старый 06.06.2012, 18:55   #11
Nerd
Чудо-кот
 
Аватар для Nerd
 
Регистрация: 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
Spy4433
ПроЭктировщик
 
Аватар для Spy4433
 
Регистрация: 16.04.2008
Сообщений: 161
Написано 36 полезных сообщений
(для 63 пользователей)
Ответ: Вопрос-Ответ

мтак и снова проблема...
нужно разделить определенную строку на слова входящая строка string

ни как не могу написать разделение сам алгаритм известен но доступ к частицам строки организовать не получается с char тож самое кому не лень
киньте пример как лучше все это забацать желательно с коментами

строка =
man{0,1,2,3}
получить в итоге нужно
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)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Spy4433 (07.06.2012)
Старый 07.06.2012, 12:46   #14
jimon
 
Сообщений: n/a
Ответ: Вопрос-Ответ

ни как не могу написать разделение сам алгаритм известен но доступ к частицам строки организовать не получается с 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; //необязательно, должно удалиться при выходе из области видимости
хм, в цпп билдере есть сборщик мусора ? память в хипе сама не удаляется (на стеке удаляется)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Spy4433 (07.06.2012)
Старый 07.06.2012, 19:39   #15
jimon
 
Сообщений: n/a
Ответ: Вопрос-Ответ

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;
}
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Spy4433 (07.06.2012)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 22:47.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com