Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
#1

Мусор в строке - C++

06.11.2013, 23:40. Просмотров 873. Ответов 22
Метки нет (Все метки)

Добрый вечер, есть функция которая принимает строку типа char*, когда я передаю этой функции строку вида "C:/SDL/Maps/1.area", вместо этой строки передается какой-то мусор.
В чем может быть дело, подскажите пожалуйста.
Вот функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
bool CArea::OnLoad(char* File) {
    MapList.clear();
 
    FILE* FileHandle = fopen(File, "r");
 
    if(FileHandle == NULL) {
        return false;
    }
 
    char TilesetFile[255];
 
    fscanf(FileHandle, "%s\n", TilesetFile);
 
    if((Surf_Tileset = CSurface::OnLoad(TilesetFile)) == false) {
        fclose(FileHandle);
 
        return false;
    }
 
    fscanf(FileHandle, "%d\n", &AreaSize);
 
    for(int X = 0;X < AreaSize;X++) {
        for(int Y = 0;Y < AreaSize;Y++) {
            char MapFile[255];
 
            fscanf(FileHandle, "%s ", MapFile);
 
            SDLMap tempMap;
            if(tempMap.OnLoad(MapFile) == false) {
                fclose(FileHandle);
 
                return false;
            }
 
            tempMap.Surf_Tileset = Surf_Tileset;
 
            MapList.push_back(tempMap);
        }
        fscanf(FileHandle, "\n");
    }
 
    fclose(FileHandle);
 
    return true;
}
Вот место в котором я передаю строку:
C++
1
2
3
if(CArea::AreaControl.OnLoad("C:/SDL/Maps/1.area") == false) {
        return false;
    }
Я просто даже не представляю в чем дело.

Добавлено через 2 часа 3 минуты
Совсем никаких идей нет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2013, 23:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Мусор в строке (C++):

Мусор - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define n 10 int main() { int a,b,i,q; scanf(&quot;%i&quot;,&amp;q); for(i=0;i&lt;q;i++) ...

Мусор в массиве - C++
Cчитываю значения из файла с помощью метода класса All в массив xlim void All :: InputLim() { ifstream f; f.open(&quot;2.txt&quot;,...

Мусор в консоли - C++
Ищу подстроку в строке и забиваю её в массив, в итоге в последнем cout выводится не то, что нужно: вместо &quot;ло в бою, очень ло&quot; выводится...

Мусор в файлах - C++
В файлы попадает какой-то мусор, в чём ошибка? #include &lt;iostream.h&gt; #include &lt;fstream.h&gt; #include &lt;string.h&gt; #include...

Мусор в массиве - C++
Задание: Подсчитать количество ненулевых разрядов в двоичной записи заданного натурального числа. Например в числе 13210 = 100001002 - 2...

Мусор в переменной - C++
Здравствуйте, есть следующий фрагмент кода: void main() { setlocale(LC_ALL,&quot;&quot;); srand(time(NULL)); const int ar = 10; int...

22
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
06.11.2013, 23:44 #2
C++
1
"C://SDL//Maps//1.area"
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
06.11.2013, 23:47 #3
Цитата Сообщение от Демик Посмотреть сообщение
"C:/SDL/Maps/1.area"
Это литерал, он неизменяем, можно привести его к char const*, приводить к char * вообще говоря некорректно. Хотя вряд ли проблема в этом, но всё же стоит изменить тип параметра метода с char * на char const*.
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 23:48 #4
с чего взяли, что передается мусор?
а если изменить сигнатуру метода на:
C++
1
bool CArea::OnLoad(const char* File)
это дает результат?
0
castaway
06.11.2013, 23:51
  #5

Не по теме:

Kuzia domovenok, не путай слэш с обратным слэшем.

1
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
06.11.2013, 23:52  [ТС] #6
Ничего не изменилось, а вот что передается вместо строки: File = 0x0042f8d8 ",щB"
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
06.11.2013, 23:54 #7
Демик, может стоит попробовать так: "C:\\SDL\\Maps\\1.area" !?
1
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.11.2013, 23:54 #8
Цитата Сообщение от Демик Посмотреть сообщение
CArea::AreaControl.OnLoad("C:/SDL/Maps/1.area")
хм. а что это за вызов такой странный?
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
06.11.2013, 23:55 #9
Цитата Сообщение от castaway Посмотреть сообщение
Демик, может стоит попробовать так: "C:\\SDL\\Maps\\1.area" !?
А что это изменит? :/
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
06.11.2013, 23:58 #10
Цитата Сообщение от gray_fox Посмотреть сообщение
А что это изменит? :/
Даже не знаю что тебе на это ответить... У тебя в ОС Windows такой путь "прокатывает"?
0
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
07.11.2013, 00:05  [ТС] #11
I.M., Вот я объявил статический объект класса
C++
1
2
public:
    static CArea   AreaControl;
После чего в другом классе вызываю функции этого класса.
Поэтому получается:
C++
1
CArea::AreaControl.OnLoad("C:/SDL/Maps/1.area")
Добавлено через 1 минуту
castaway, У меня была опечатка с двумя такими слешами, получилось так:
Вместо:
"C:/SDL/Maps//1.area"\
Считался путь:
"C:/SDL/Maps/"
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
07.11.2013, 00:07 #12
castaway, всегда, уж с fopen таких проблем не должно быть. В любом случае, проблема же не в том, что файл не открывается.
1
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
07.11.2013, 00:16  [ТС] #13
gray_fox, да, вы правы, проблема в том, что строка портится перед вызовом fopen.
0
Демик
9 / 9 / 0
Регистрация: 19.04.2012
Сообщений: 114
07.11.2013, 10:43  [ТС] #14
Я думаю, мне лучше скинуть сюда проект, может это поможет решить мою проблему. Вместе с проектом я приложил используемые библиотеки SDL2 и SDL2_Image.
0
Вложения
Тип файла: zip Проект.zip (6.14 Мб, 3 просмотров)
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
07.11.2013, 23:30 #15
Цитата Сообщение от castaway Посмотреть сообщение

Не по теме:

Kuzia domovenok, не путай слэш с обратным слэшем.

это да, я просто привык, что в адресах файлов винды слеши удваиваются и посоветовал автоматом. Кто ж знал, что у автора ещё и слеши перевёрнутыДемик, если бы ты внимательно тему, ты бы уже давно заменил свою строку на
C++
1
"C:\\SDL\\Maps\\1.area")
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 23:30
Привет! Вот еще темы с ответами:

Мусор в массиве - C++
Не могу понять в чем проблема, выводит мусор при компиляции в массивах name, avtor, izdat. Так же крашит при попытке ввода. #include...

Мусор в строках - C++
Привет всем!!! Я пишу помехоустойчивый декодер Витерби. Имеется граф 4x32. struct graf { int rebro0; int rebro1; ...

Мусор и оператор new - C++
Создаю глобальный указатель на структуру, инициализирую некоторые поля после выделения оператором new. Вызываю функцию (callback)...

Непонятный мусор в char - C++
Здравствуйте. Имеется задача, убрать все пробелы перед точками. Пример: Hello my .dear world . -&gt; Hello my.dear world. Всё...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
07.11.2013, 23:30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru