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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.87
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
#1

Функция strcpy - C++

03.04.2011, 08:22. Просмотров 7936. Ответов 27
Метки нет (Все метки)

цель очевидна. почему не работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
void strcpy(char *from, char *to) {
        to=from;
}
int main()
{
    char* f = "The array of chars";
    char* t = "An Array of chars!";
    strcpy(f,t);
    std::cout<<t;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 08:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция strcpy (C++):

функция strcpy и strcat - C++
Добрый день!У меня такая проблема...Есть массив строк, где хранятся имена и при выводе имени на экран,если оно длиннее определенного,то я...

Массивы строк и функция strcpy - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;cctype&gt; using namespace std; int mystrcpy( char *stl ,char *str); int...

Что делает функция strcpy(t, f) - C++
Функция strcpy(t, f) что она делает?

Функция strcpy() не копирует строку - C++
Функция strcpy() не копирует строку //--------------------------------------------------------------------------- #pragma hdrstop ...

Функция strcpy () - строка должна быть пустой? - C++
Здравствуйте! Возник вопрос: пусть имеются две непустые строки s1 и s2. Правильно ли копировать содержимое строки s2 в строку s1? Или...

Не работает функция gets(), strcpy() и другие функции с строками - C++
Подключеные библиотеки все. MVS 2013. #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cctype&gt; using namespace std; int...

27
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
03.04.2011, 13:23 #16
Vladimir., Какраз верно. Ошибка сегментирования при char*

Добавлено через 3 минуты
баян в том что тему растянули.. а не в том что я скопировал
0
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
03.04.2011, 14:02 #17
Установил последнюю версию g++.. nxnx прав, мои извинения.
0
Hagrael
БТР - мой друг
331 / 273 / 2
Регистрация: 07.01.2010
Сообщений: 1,932
28.06.2011, 13:51 #18
Цитата Сообщение от [Freeman
;1514966]
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
void strcpy(char *& from, char *& to) {
* * * * to = from;
}
int main()
{
* * char* f = "The array of chars";
* * char* t = "An Array of chars!";
* * strcpy(f,t);
* * std::cout<<t;
* * return 0;
}
По-моему в результате этого кода указатель to станет указывать туда же, куда и указатель from, и при изменении одной из этих строк после вызова функции, изменится и вторая строка. Но у меня вообще ошибка выходит:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
void strcopy(char *& from, char *& to) {
    to=from;
}
 
int main() {
 
    char str[10]="Hello!";
    char copy[10];
    strcopy(str, copy);
 
    return 0;
}
Добавлено через 1 минуту
А когда сменил массивы на указатели:
C++
1
2
char* str="Hello!";
char* copy;
все заработало... Почему с массивами не получилось? Они же тоже являются указателями.
0
antonboom
bmstu-team
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
21.03.2014, 10:24 #19
Ребят, почему не работает?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h" 
#include <locale.h> 
#include <stdio.h> 
#include <conio.h> 
#include <string.h> 
#include <stdlib.h>
 
char *cpy(char s[20])
{ char news[21];
    strcpy(news,s);
    return news;
}
void main()
{ 
   char s[20]="Hello, World!";
   setlocale(0,"russian");
     puts(FIO(s));
 
   puts("\n\nНажмите любую клавишу для завершения...");
  _getch();
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.03.2014, 10:37 #20
Цитата Сообщение от antonboom Посмотреть сообщение
почему не работает?
Не стоит возвращать указатель на локальный объект:
C++
1
return news;
А еще неизвестно, что такое FIO. Да и вообще, у Вас вроде бы репа имеется, а задаете вопрос в слишком общей форме. Конкретизируйте ошибку.
1
antonboom
bmstu-team
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
21.03.2014, 10:49 #21
Прошу прощения, скопировав на форум, забыл изменить FIO на cpy - функцию.
C++
1
 puts(cpy(s));
Программа должна вывести "Hello, World!", но выводит "смайлик" или "Hellсмайлик".
До этого у меня описана подобная функция, возвращающая строку, только там я не использовал strcpy и все работало замечательно.

Добавлено через 5 минут
Есть еще вариант, что ошибка в puts(), потому что если сделать переменную указатель и ей присвоить значение функции все будет в порядке, она хранит адрес строки (отладчик показывает), но puts() не может вывести правильно.

Добавлено через 3 минуты
Tulosba, спасибо.
Не стоит возвращать указатель на локальный объект, вы были правы.
Спасибо!

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h" 
#include <locale.h> //для языков
#include <stdio.h> //ввод-вывод
#include <conio.h> //консольный режим
#include <string.h> //строки
#include <stdlib.h>
char news[20];
char *cpy(char *r)
{ 
  strcpy(news,r);
  return news;
}
void main()
{  char s[20]="Hello, World!";
 
    setlocale(0,"russian");
    puts(cpy(s));
 
   puts("\n\nНажмите любую клавишу для завершения...");
  _getch();
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.03.2014, 10:58 #22
antonboom, глобальных переменных тоже лучше избегать. Передавайте лучше в cpy() указатель на целевую строку. В итоге, правда, получится обертка над strcpy с такой же сигнатурой и без дополнительных побочных эффектов. Т.о. cpy() будет не нужна вовсе
P.S. передавать неизменяемую строку (а ведь строка, которая копируется, не изменяется) следует по крайней мере через const char*.
0
antonboom
21.03.2014, 12:37
  #23

Не по теме:

У меня функция, выполняющая разные операции со строкой-аргументом и возвращающая преобразованную строку. Пустой strcpy() в функции просто, чтобы разобраться. Я думал в нём проблема

0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.03.2014, 12:44 #24
Цитата Сообщение от antonboom Посмотреть сообщение
Пустой strcpy() в функции просто, чтобы разобраться. Я думал в нём проблема
Проблемы в стандартных функциях бывают очень-очень-очень редко. И чаще всего проблемы относятся к неправильному их использованию.
0
antonboom
bmstu-team
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 420
Записей в блоге: 10
21.03.2014, 12:56 #25
Все, к черту. Буду делать так (кажется пришли к началу темы):
C++
1
2
3
4
void cpy(char s[80],char news[80])
{  
   strcpy(news,s);
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.03.2014, 13:07 #26
C++
1
void cpy(char s[80],char news[80])
Имейте в виду, что этот размер (80) по факту не учитывается и не проверяется.
Лучше вообще пользоваться strncpy() с передачей максимального размера строки как отдельного параметра.
И ещё, в сишных (и не только) функциях принято первым аргументом задавать целевой, а потом уже исходный. Это как при присваивании:
C++
1
2
destination = source;
f( destination, source );
1
Evg
Эксперт CАвтор FAQ
18030 / 6262 / 427
Регистрация: 30.03.2009
Сообщений: 17,207
Записей в блоге: 27
21.03.2014, 13:39 #27
antonboom, в идеальном случае ты должен объяснить словами, чего конкретно ты хочешь, а тебе расскажут, как это сделать
0
antonboom
21.03.2014, 15:06     Функция strcpy
  #28

Не по теме:

Читайте после 3х сообщений выше, спасибо.
Усиленная конкретика здесь не обязательна.

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

strcpy - C++
Недавно начал программировать на C++, в типах плохо ещё разбираюсь... не могу понять, что надо исправить, чтобы код: char szSendBuff; ...

strcpy() - C++
Ребята! Помогите с задачкой! С помощью функции strcpy() заменить в строке три символа, начиная со второго. Для замены вводим короткую...

strcpy - C++
прога пашет,но после сортировки по результату,он выдает какойто корявый список,тоесть strcpy неверно пашет...... че с ней теперь...

Strcpy в vs2012 - C++
Недавно перешел из devc++ в vs2012, после копирования кода в vs2012, выдает ошибку при использовании ф-ии strcpy (команду для препроцессора...


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

Или воспользуйтесь поиском по форуму:
28
21.03.2014, 15:06
Ответ Создать тему
Опции темы

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