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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
#1

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

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

Есть char *mydir он указывает на второй аргумент, эсли я дописую символы с помощью strcat то соответственно инфа меняеться.
Как сделать копию изначальной char *mydir ???
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2011, 00:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование указателя С++ (C++):

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

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

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

Преобразование кода без указателя в код с использованием указателя - C++
Правильно ли выполнил? Исходный код без указателя #include <iostream> #include <cstdlib> #include <fstream> using namespace...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 00:52 #2
strcpy()
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.04.2011, 01:05 #3
Или strdup.
Но это не совсем копирование)
0
Alex1991
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
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 01:20 #5
А память кто будет под временную строку выделять?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.04.2011, 01:23 #6
А strdup поможет не выделять. Но очищать придеться.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 01:24 #7
А ещё лучше заюзать std::string и не париться с копированием, выделением и освобождением ресурсов))
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
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
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 01:27 #9
Цитата Сообщение от 'ForEveR' Посмотреть сообщение
Если С++
Цитата Сообщение от 'Alex1991' Посмотреть сообщение
C++
1
#include <iostream>
как бы намекает
1
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.04.2011, 01:27 #10
silent_1991, Не смотрел код, каюсь) Но принцип действия strdup знать полезно.
1
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 01:29 #11
ForEveR, не спорю, но тут скорее практическая задача, нежели учебная, а если и учебная, то не на строки и динамическую память, так что хочется побыстрее, покрасивее и покомпактнее)))
0
Alex1991
1 / 1 / 0
Регистрация: 03.12.2008
Сообщений: 34
24.04.2011, 01:30  [ТС] #12
Выделил так:
C++
1
char *tmp=new char[100];
Но все-равно указатель "mydir" меняется.. хотя не должен
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 01:33 #13
Показывайте весь код.
0
Alex1991
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
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
24.04.2011, 01:36 #15
C++
1
tmp=mydir;
Что это?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2011, 01:36
Привет! Вот еще темы с ответами:

Перезаписать память начиная с указателя Bitmap[1] элементами начиная с указателя Bitmap[0] - C++
Задан массив из 3 указателей Bitmap, по адресу Bitmap необходимо записать 480*640 элементов из массива Bitmap. В последнем цикле for выдает...

Содержимое указателя - C++
Предположим, что указатель №1 хранит адрес на другой указатель №2 в какой либо программе. Как прочесть указатель №1 и этим узнать адрес...

Размер указателя - C++
sizeof(void*);// Размер указателя на любой тип равен 8, почему так много? И можно ли как-нибудь узнать сколько под указатель выделено...

Использование указателя this - C++
Вообщем решил я задачу: файл 1: // stack.h -- class definition for the stack ADT #ifndef STACK_H_ #define STACK_H_ #include...


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

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

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