Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
1

Копирование указателя С++

24.04.2011, 00:48. Показов 8936. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть char *mydir он указывает на второй аргумент, эсли я дописую символы с помощью strcat то соответственно инфа меняеться.
Как сделать копию изначальной char *mydir ???
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2011, 00:48
Ответы с готовыми решениями:

Копирование указателя
При выходе из функции поле Tail теряет свои значения, я так понимая это происходит из-за того что...

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс)...

Создание указателя на экземпляр класса, описанного после объявления указателя
Здравствуйте! Проблема в том, что нужно сделать так: class A{ public: B* b = nullptr; }; ...

Как сделать функцию от указателя на класс и указателя на метод?
Не получается сделать функцию, параметрами которой являются указатель на класс и на метод....

17
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 00:52 2
strcpy()
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.04.2011, 01:05 3
Или strdup.
Но это не совсем копирование)
0
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
24.04.2011, 01:18  [ТС] 4
Все-равно не получается ((
Может посмотрите, эта прога для копирования файлов которые находяться в текущей директории В указанную папку.
пример:
./a.out papka/
После этого файлы должны скопироваться в папку "papka"

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
46
47
48
49
50
51
52
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
 
 
using namespace std;
 
int 
my_double_ls (const char *name, char *mydir)
{
  struct dirent *d;
  DIR *dp;
    char *tmp;
    strcpy(tmp, mydir);
    
  /* Открытие каталога с проверкой ошибок */
  if ((dp = opendir (name)) == NULL)
    return (-1);
 
  /* Продолжить обход каталога,
   * выводя записи в нем, если
   * индекс остается допустимым
   */
int count1=0;
  while (d = readdir (dp))
    {
    count1++;
      if (d->d_ino != 0)
    {
      cout<<d->d_name<<endl;
      strcat(tmp, d->d_name);
      
      link(d->d_name, tmp);
      tmp=mydir;
    }
    }
 
    cout<<"Count of files: "<<count1<<endl;
 
  closedir (dp);
  return (0);
}
 
int main (int argc, char *argv[])
{
 
    my_double_ls (".",argv[1]);
 
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:20 5
А память кто будет под временную строку выделять?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.04.2011, 01:23 6
А strdup поможет не выделять. Но очищать придеться.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:24 7
А ещё лучше заюзать std::string и не париться с копированием, выделением и освобождением ресурсов))
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.04.2011, 01:25 8
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main()
{
    const char* string = "Hello";
    char * new_str = strdup(string);
    printf("%s\n", new_str);
    free(new_str);
    return 0;
}
Добавлено через 11 секунд
silent_1991, А вот тут согласен. Если С++.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:27 9
Цитата Сообщение от 'ForEveR' Посмотреть сообщение
Если С++
Цитата Сообщение от 'Alex1991' Посмотреть сообщение
C++
1
#include <iostream>
как бы намекает
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.04.2011, 01:27 10
silent_1991, Не смотрел код, каюсь) Но принцип действия strdup знать полезно.
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:29 11
ForEveR, не спорю, но тут скорее практическая задача, нежели учебная, а если и учебная, то не на строки и динамическую память, так что хочется побыстрее, покрасивее и покомпактнее)))
0
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
24.04.2011, 01:30  [ТС] 12
Выделил так:
C++
1
char *tmp=new char[100];
Но все-равно указатель "mydir" меняется.. хотя не должен
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:33 13
Показывайте весь код.
0
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
24.04.2011, 01:34  [ТС] 14
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
46
47
48
49
50
51
52
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <string.h>
 
 
using namespace std;
 
int 
my_double_ls (const char *name, char *mydir)
{
  struct dirent *d;
  DIR *dp;
    char *tmp=new char[100];
    strcpy(tmp, mydir);
    
  /* Открытие каталога с проверкой ошибок */
  if ((dp = opendir (name)) == NULL)
    return (-1);
 
  /* Продолжить обход каталога,
   * выводя записи в нем, если
   * индекс остается допустимым
   */
int count1=0;
  while (d = readdir (dp))
    {
    count1++;
      if (d->d_ino != 0)
    {
      cout<<d->d_name<<endl;
      strcat(tmp, d->d_name);
      cout<<"----------->"<<mydir<<endl; //для проверки
      link(d->d_name, tmp);
      tmp=mydir;
    }
    }
 
    cout<<"Count of files: "<<count1<<endl;
 
  closedir (dp);
  return (0);
}
 
int main (int argc, char *argv[])
{
 
    my_double_ls (".",argv[1]);
 
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:36 15
C++
1
tmp=mydir;
Что это?
0
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
24.04.2011, 01:38  [ТС] 16
Цитата Сообщение от silent_1991 Посмотреть сообщение
C++
1
tmp=mydir;
Что это?
хочу присвоить tmp первоначальное значение а именно имя директории для копирования
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.04.2011, 01:40 17
Alex1991, этой строчкой вы делаете только одно - присваиваете указателю tmp адрес строки mydir. Немудрено, что mydir в итоге меняются, и tmp, и mydir будут указывать после этого на одну и ту же область памяти. Вам же сказали, строки копируются не так.
1
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
24.04.2011, 01:42  [ТС] 18
Цитата Сообщение от silent_1991 Посмотреть сообщение
Alex1991, этой строчкой вы делаете только одно - присваиваете указателю tmp адрес строки mydir. Немудрено, что mydir в итоге меняются, и tmp, и mydir будут указывать после этого на одну и ту же область памяти. Вам же сказали, строки копируются не так.
Блин.. а реально во я баран

Спасибо Большое !!! Кажись немного понял суть указателей
0
24.04.2011, 01:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2011, 01:42
Помогаю со студенческими работами здесь

Преобразование кода без указателя в код с использованием указателя
Правильно ли выполнил? Исходный код без указателя #include &lt;iostream&gt; #include &lt;cstdlib&gt;...

Возвращение неконстантного указателя из константного указателя на строку
Не могу до конца понять один момент. Допустим, у нас есть функция searchSymbol, которая принимает...

В чём отличие константного указателя и указателя на константу?
int *const p1 и int const* p2 Объясните мне в чём тут отличие.

Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на абстрактный класс А ...
Написать обработчик исключений ситуации при преобразовании указателя на класс B до указателя на...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru