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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.87
nikkka
Мат в 32 хода
 Аватар для nikkka
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
03.04.2011, 08:22     Функция strcpy #1
цель очевидна. почему не работает?
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2011, 08:22     Функция strcpy
Посмотрите здесь:

strcpy C++
C++ функция strcpy и strcat
C++ strcpy()
Массивы строк и функция strcpy C++
C++ Функция strcpy () - строка должна быть пустой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antonboom
bmstu-team
 Аватар для antonboom
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 419
Записей в блоге: 10
21.03.2014, 10:49     Функция strcpy #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();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.03.2014, 10:58     Функция strcpy #22
antonboom, глобальных переменных тоже лучше избегать. Передавайте лучше в cpy() указатель на целевую строку. В итоге, правда, получится обертка над strcpy с такой же сигнатурой и без дополнительных побочных эффектов. Т.о. cpy() будет не нужна вовсе
P.S. передавать неизменяемую строку (а ведь строка, которая копируется, не изменяется) следует по крайней мере через const char*.
antonboom
21.03.2014, 12:37
  #23

Не по теме:

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

Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.03.2014, 12:44     Функция strcpy #24
Цитата Сообщение от antonboom Посмотреть сообщение
Пустой strcpy() в функции просто, чтобы разобраться. Я думал в нём проблема
Проблемы в стандартных функциях бывают очень-очень-очень редко. И чаще всего проблемы относятся к неправильному их использованию.
antonboom
bmstu-team
 Аватар для antonboom
301 / 136 / 56
Регистрация: 10.01.2012
Сообщений: 419
Записей в блоге: 10
21.03.2014, 12:56     Функция strcpy #25
Все, к черту. Буду делать так (кажется пришли к началу темы):
C++
1
2
3
4
void cpy(char s[80],char news[80])
{  
   strcpy(news,s);
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.03.2014, 13:07     Функция strcpy #26
C++
1
void cpy(char s[80],char news[80])
Имейте в виду, что этот размер (80) по факту не учитывается и не проверяется.
Лучше вообще пользоваться strncpy() с передачей максимального размера строки как отдельного параметра.
И ещё, в сишных (и не только) функциях принято первым аргументом задавать целевой, а потом уже исходный. Это как при присваивании:
C++
1
2
destination = source;
f( destination, source );
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16829 / 5250 / 321
Регистрация: 30.03.2009
Сообщений: 14,139
Записей в блоге: 26
21.03.2014, 13:39     Функция strcpy #27
antonboom, в идеальном случае ты должен объяснить словами, чего конкретно ты хочешь, а тебе расскажут, как это сделать
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2014, 15:06     Функция strcpy
Еще ссылки по теме:

Что делает функция strcpy(t, f) C++
Не работает функция gets(), strcpy() и другие функции с строками C++
C++ Функция strcpy() не копирует строку

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

Или воспользуйтесь поиском по форуму:
antonboom
21.03.2014, 15:06     Функция strcpy
  #28

Не по теме:

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

Yandex
Объявления
21.03.2014, 15:06     Функция strcpy
Ответ Создать тему
Опции темы

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