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

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

Войти
Регистрация
Восстановить пароль
 
yapechenko
0 / 0 / 0
Регистрация: 13.07.2013
Сообщений: 22
#1

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

20.08.2013, 00:24. Просмотров 380. Ответов 5
Метки нет (Все метки)

Добрый вечер. Столкнулся с Проблемой: надо скопировать содержимое "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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 00:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирование строк (C++):

Используя функцию копирования строк, организуйте конкатенацію и копирование строк в четвертый массив, содержащий полные имена - C++
Пожалуйста с этим заданием. Написать программу, которая описывает четыре массива. Три первых массива должны содержать имена, фамилии и...

Копирование строк - C++
Нужно сравнить две строки не учитывая пробелы. Ошибка где-то в копировании a1 в с1 #define _CRT_SECURE_NO_WARNINGS #include...

копирование строк - C++
Как на языке Си скопировать из строки s1 в строку s2 n символов с k-ой позиции?

копирование строк - C++
Скопировать из файла F1 в файл F2 все строки, кроме той строки, в которой больше всего гласных букв. Ну или просто скопировать строку...

Копирование строк - C++
Всем доброго времени суток. У меня такой вопрос как можно копировать строка в строку не с заменой, а с добавлением в строку. например...

Копирование строк - C++
У Страуструпа приведен такой пример для копирования одной строки в другую: void cpy (char* p, const char* q) { while...

5
-=ЮрА=-
Заблокирован
Автор 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
1
cmath
Модератор
2440 / 1680 / 134
Регистрация: 11.08.2012
Сообщений: 3,338
Завершенные тесты: 6
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;
}
У вас, я так понял, вылезает ошибка "нарушение прав доступа", да?
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";

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

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 02:23
Привет! Вот еще темы с ответами:

Копирование строк - C++
И опять столкнулся с проблемой. Описываю функцию, которая копирует k символов из строки str в строку s. Вот мой код: void...

Копирование Строк - C++
В общем, я продолжаю разборки с С(++) и у меня снова вопрос, ответ на который ув. тов. Google не дал. Гад! Задача: даны три строки,...

копирование строк - C++
ребят, не подкажете как скопировать строку из искомой, начиная с символа а и заканчивая символом б? #include &quot;stdafx.h&quot; #include...

копирование строк, производительность - C++
подскажи, как максимально быстро скопировать сроку memcpy или я написал свою функцию size_t i = 0; while (*(szReceiver + i) =...


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

Или воспользуйтесь поиском по форуму:
6
20.08.2013, 02:23
Ответ Создать тему
Опции темы

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