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

указатели - C++

Восстановить пароль Регистрация
 
@Manya@
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 20
09.05.2011, 01:36     указатели #1
Добрый вечер
Есть некоторый массив указателей char *mas[100] и указатель char *pointer = new char [50]
В pointer время от времени что-то пишется и перезатирается. Хотелось бы присвоить mas[COUNTER], где COUNTER пробегает, некоторые значения, значения из pointer. Но не так mas[counter] = pointer))
Как это записать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 01:36     указатели
Посмотрите здесь:

C++ Указатели
Указатели.... C++
C++ Указатели
Указатели C++
Указатели. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
09.05.2011, 01:38     указатели #2
Цитата Сообщение от @Manya@ Посмотреть сообщение
Добрый вечер
Есть некоторый массив указателей char *mas[100] и указатель char *pointer = new char [50]
В pointer время от времени что-то пишется и перезатирается. Хотелось бы присвоить mas[COUNTER], где COUNTER пробегает, некоторые значения, значения из pointer. Но не так mas[counter] = pointer))
Как это записать?
strcpy()
@Manya@
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 20
09.05.2011, 01:46  [ТС]     указатели #3
Кракозябры выводит(
Всем строкам в конце присвоен '\0'
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
09.05.2011, 01:48     указатели #4
Цитата Сообщение от @Manya@ Посмотреть сообщение
Добрый вечер
Но не так mas[counter] = pointer))
а почему не так?
у меня работает=/
C++
1
2
3
4
5
6
7
char *mas[100];
    char *pointer=new char [50];
    for(int i=0;i<10;i++)
        cin>>pointer[i];
    mas[0]=pointer;
    for(int i=0;i<10;i++)
        cout<<mas[0][i]<<" ";
@Manya@
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 20
09.05.2011, 02:01  [ТС]     указатели #5
Цитата Сообщение от @Manya@ Посмотреть сообщение
Кракозябры выводит(
Всем строкам в конце присвоен '\0'
точнее так - pointer содержит нормальные верные значения. Каждый раз при обновлении они верные. При выполнении strcpy(mas[COUNTER++], pointer) иногда происходит дописывание в строку mas к предыдущему значению(из меньшего индекса COUNTER). Это все из-за того, что размеры содержания pointer меняются. Как удалить из него значение?( вариант инициализирования в другом месте не подходит(( )
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
09.05.2011, 02:08     указатели #6
поэлементно копируй тогда=/
C++
1
2
for(int i=0;i<10;i++)
                mas[0][i]=pointer[i];
я не пойму в чем проблема то?)
@Manya@
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 20
09.05.2011, 02:12  [ТС]     указатели #7
такое обращение не прокатывает)
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
09.05.2011, 02:20     указатели #8
почему же не прокатывает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
int main()
{
    char *mas[100];
    char *pointer=new char [50];
    for(int i=0;i<10;i++)
        cin>>pointer[i];
    
    mas[0]=pointer;
    for(int i=0;i<10;i++)
        cout<<mas[0][i]<<" ";
 
    cout<<endl;
    mas[1]=new char [10];
    for(int i=0;i<10;i++)
        mas[1][i]=pointer[i];
    for(int i=0;i<10;i++)
        cout<<mas[1][i]<<" ";
    system("pause");
    return 0;
}
@Manya@
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 20
09.05.2011, 22:06  [ТС]     указатели #9
кто ж знает, почему))
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
void main(void) {
    char *str = new char [100];
    char *word = new char [50];
    int counter = 0;
    char *mass[100];
    int i = 0, z = 0, k = 0, len = 0;
    int Count = 0;
    while (Count < 3) {
        while ((str[i++] = getchar()) != '\n');
        Count++;
        str[i++] = '\0';
        i = 0;
        k = 0;
        z = 0;
        while ((str[k] != '\0') ) {
            if (str[k] != ' ') {
                while ((k < strlen(str) - 1) && (str[k]!= ' ')) {
                    word[z++] = str[k++];
                    i++;
                }
                word[z++] = '\0';
                //strcpy(mass[counter++], word);
                len = strlen(word);
                for (z = 0; z<len; z++)
                    printf("%c", word[z]);
                printf(" ");
            }
            k++;
            z = 0;
            i = 0;
        }
        mass[counter] = NULL;
        /*for (i = 0; i<counter; i++)
            printS(mass[i]);
        counter = 0;*/
    }
    delete [] str;
    delete [] word;
}
разбивание строки на подстроки, ф-ми из string.h не злоупотреблять)) На строки разбивает верно, а вот как word запихнуть в mass.... Ничего не пашет, вылетает, при дебаге суть ошибки мною не понята(

Добавлено через 17 часов 42 минуты
не, все таки не понятно( Ошибка происходит только тогда, когда я записываю word в mass любым приемлимым способом... А если не использовать mas, то все Ok

Добавлено через 1 час 33 минуты
тьфу, не на строки, а на слова))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 06:59     указатели
Еще ссылки по теме:

Указатели C++
C++ Указатели
C++ Указатели

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.05.2011, 06:59     указатели #10
если пишешь на C, используй malloc() и free()
если у тебя массив сделан для слов, то при сохранении каждого слова нужно выделять для него память, потом туда копировать слово, а потом указатель на эту память сохранять в массив указателей

отсюда видно, что str сделана для текущей строки, а word для текущего слова
нельзя допускать, чтобы текущее слово перезатирало сохранённое, поэтому и отдельная память
Yandex
Объявления
10.05.2011, 06:59     указатели
Ответ Создать тему
Опции темы

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