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

Строку в массив строк - C++

Восстановить пароль Регистрация
 
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 17:18     Строку в массив строк #1
Здравствуйте, написал функцию, которая записывает слово, как отдельный элемент массива, но я получаю ошибку
Debug Assertion Failed
Invalid Null Pointer

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct CommandArray
{
    char** Arr;
    USHORT Num;
};
 
CommandArray Text::StrToArray(LPSTR Str)
{
    CommandArray Out;
    LPSTR TempStr;
    Out.Num = 0;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
        strcpy(Out.Arr[Out.Num],TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
    return Out;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.08.2012, 17:19     Строку в массив строк #2
BuGi, А память для Arr кто выделять будет? strcpy ожидает буфер с уже выделенной памятью.
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 17:31     Строку в массив строк #3
Цитата Сообщение от BuGi Посмотреть сообщение
C++
1
strcpy(Out.Arr[Out.Num],TempStr);
Arr не выделен, и не инициализирован.
Нужно хотя бы так:
C++
1
2
3
4
5
6
7
Out.Arr=new char*[100]; // на сто элементов
 while(TempStr != NULL)
    {
      Out.Arr[Out.Num]=new char[strlen(TempStr)+1];
        strcpy(Out.Arr[Out.Num],TempStr);
   Out.Num++;
...
Но лучше использовать vector
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
using namespace std;
struct CommandArray
{
    vector<char*> Arr;
    USHORT Num;
};
 
CommandArray Text::StrToArray(LPSTR Str)
{
    CommandArray Out;
    LPSTR TempStr;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
      Out.push_back(TempStr);
        TempStr = strtok(NULL," ");
    }
    return Out;
}
Вроде должно работать.
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 18:15  [ТС]     Строку в массив строк #4
Во всех случаях вылетает та же ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CommandArray Text::StrToArray(LPSTR Str)
{
    CommandArray Out;
    Out.Arr = new char*[128];
    LPSTR TempStr;
    Out.Num = 0;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
        Out.Arr[Out.Num] = new char[strlen(TempStr)+1];
        strcpy(Out.Arr[Out.Num],TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
    return Out;
}
структуру оставил такой же

Добавлено через 6 минут
Хотя нет, это из-за другого. Но сейчас почему-то Out.Num == 1 всегда
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 18:20     Строку в массив строк #5
а так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
using namespace std;
struct CommandArray
{
    vector<char*> Arr;
    USHORT Num;
};
 
CommandArray Text::StrToArray(LPSTR Str)
{
    CommandArray Out;
    LPSTR TempStr;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
      Out.Arr.push_back(TempStr);
        TempStr = strtok(NULL," ");
    }
    return Out;
}
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 18:45  [ТС]     Строку в массив строк #6
1, даже если ничего не вводить (т.е. поставить \0)

Добавлено через 16 минут
C++
1
2
3
4
5
6
7
8
9
while(TempStr != NULL)
    {
        //Out.Arr[Out.Num] = new char[strlen(TempStr)+1];
        //strcpy(Out.Arr[Out.Num],TempStr);
        cout << TempStr << "\n";
        Out.Arr.push_back(TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
Выводит только то, что до первого пробела, но почему? http://www.cplusplus.com/reference/c...string/strtok/ по этому принципу написано, должно работать
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 19:17     Строку в массив строк #7
Где у вас код, который выводит?
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 20:00  [ТС]     Строку в массив строк #8
C++
1
2
3
4
5
6
7
8
9
while(TempStr != NULL)
    {
        //Out.Arr[Out.Num] = new char[strlen(TempStr)+1];
        //strcpy(Out.Arr[Out.Num],TempStr);
        cout << TempStr << "\n";
        Out.Arr.push_back(TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 20:18     Строку в массив строк #9
а вам что нужно? функция strtok записывает в tempstr строку до первого пробела! -
strtok(строка-буффер,символы до которых считываем)
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 20:24  [ТС]     Строку в массив строк #10
http://www.cplusplus.com/reference/c...string/strtok/
Splitting string "- This, a sample string." into tokens:
This
a
sample
string
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 21:07     Строку в массив строк #11
Т.е. у вас не работает цикл? я правильно понимаю?
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 21:08  [ТС]     Строку в массив строк #12
Ну видимо да
cossack5
54 / 48 / 1
Регистрация: 02.08.2012
Сообщений: 127
15.08.2012, 21:31     Строку в массив строк #13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include <vector>
struct CommandArray
{
    vector<string> Arr;
    USHORT Num;
};
 
CommandArray Text::StrToArray(LPSTR Str)
{
    CommandArray Out;
    LPSTR TempStr;
    Out.Num = 0;
    TempStr = strtok (Str," ");
    while(TempStr != NULL)
    {
       Arr.push_back(TempStr);
        Out.Num++;
        TempStr = strtok(NULL," ");
    }
    return Out;
}
Вот так должно работать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2012, 21:37     Строку в массив строк
Еще ссылки по теме:

C++ Сформировать массив строк. Удалить из него самую короткую строку
C++ Сформировать массив строк. Удалить из него строку начинающуюся на букву «а»
Как поместить строку в двумерный массив строк C++

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

Или воспользуйтесь поиском по форуму:
BuGi
24 / 24 / 1
Регистрация: 02.01.2012
Сообщений: 371
15.08.2012, 21:37  [ТС]     Строку в массив строк #14
Не, надо с чаром
Yandex
Объявления
15.08.2012, 21:37     Строку в массив строк
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru