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

Копирование строк - C++

Восстановить пароль Регистрация
 
yapechenko
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 22
20.08.2013, 00:24     Копирование строк #1
Добрый вечер. Столкнулся с Проблемой: надо скопировать содержимое "buff" в "hashes[a].pointname" . Попробовал strcpy - компилируется без ошибок, при запуске вылетает.
Прошу вашей помощи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Hash
    {
        char *pointname;
    };
int main()
{
    char buff[10] = "FIRST";
    int a = 0;
    struct Hash hashes[10];
    hashes[a].pointname = NULL; 
    
    strcpy(hashes[a].pointname, buff);
    printf("%s",hashes[a].pointname);
    
    system ("PAUSE");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 00:24     Копирование строк
Посмотрите здесь:

Копирование Строк C++
C++ копирование строк
C++ Копирование строк
C++ копирование строк
C++ копирование строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2013, 01:15     Копирование строк #2
yapechenko, а память кто под hashes[a].pointname будет выделять?

Добавлено через 46 секунд
Хотя бы так запиши
Цитата Сообщение от yapechenko Посмотреть сообщение
hashes[a].pointname = new char[10];
strcpy(hashes[a].pointname, buff);
printf("%s",hashes[a].pointname);
Добавлено через 1 минуту
Вообще если под Си то корректно выделять память через malloc по ссылке реализация http://codepad.org/TLpzWWMq
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
20.08.2013, 01:22     Копирование строк #3
Вот так не вылетает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Hash
{
        char *pointname;
};
 
int main()
{
    char buff[10] = "FIRST";
    int a = 0;
    struct Hash hashes[10];
    hashes[a].pointname = NULL;
    hashes[a].pointname = buff;
    printf("%s\n",hashes[a].pointname);
    
    system ("PAUSE");
    return 0;
}
И так тоже не вылетает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Hash
{
        char *pointname;
};
 
int main()
{
    char buff[10] = "FIRST";
    int a = 0;
    struct Hash hashes[10];
    hashes[a].pointname = new char[sizeof(buff) / sizeof(char)]; 
    strcpy(hashes[a].pointname, buff);
    printf("%s\n",hashes[a].pointname);
    
    system ("PAUSE");
    delete [] hashes[a].pointname;
    return 0;
}
У вас, я так понял, вылезает ошибка "нарушение прав доступа", да?
-=ЮрА=-
Заблокирован
Автор FAQ
20.08.2013, 01:33     Копирование строк #4
cmath,
Цитата Сообщение от cmath Посмотреть сообщение
hashes[a].pointname = new char[sizeof(buff) / sizeof(char)];
- зачем повторять сказанное выше?
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
hashes[a].pointname = new char[10];
притом что в СИ надо малоок для мемори
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
http://codepad.org/TLpzWWMq
Цитата Сообщение от cmath Посмотреть сообщение
hashes[a].pointname = buff;
а теперь обработай hashes[a].pointname скажем
hashes[a].pointname[2] = '!'; чтобы не покоробить char buff[10] = "FIRST";

Не по теме:

Добавлено через 2 минуты
ЗЫ:Это на случай если не понятны слова
http://codepad.org/nAYjyI50

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
а теперь обработай hashes[a].pointname скажем
hashes[a].pointname[2] = '!'; чтобы не покоробить char buff[10] = "FIRST";

yapechenko
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 22
20.08.2013, 01:43  [ТС]     Копирование строк #5
-=ЮрА=-, Спасибо.
cmath,Первый способ не прокатит, т.к. именно надо скопировать что бы продолжить использовать buff.
За второй способ спасибо.
Нет, ошибка не вылезает.
cmath
20.08.2013, 02:23     Копирование строк
  #6

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
зачем повторять сказанное выше?
Когда я свой пост набирал, вашего еще не было. Просто вы раньше нажали "ответить" и все.

Yandex
Объявления
20.08.2013, 02:23     Копирование строк
Ответ Создать тему
Опции темы

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