Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2011, 23:43   #11
rus12
Пользователь
 
Регистрация: 20.03.2011
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Акоб Посмотреть сообщение
rus12,
char *strcpy( char *strDestination, const char *strSource );
Отсюда разве не следует, что strcpy(str3 ,str1); strcat(str3,str2);
str1,str2,str3 должны быть указателями на char???
Указатель это просто ссылка на объект
поэтому такой код тоже будет работать
Код:
  char str1[]="Hello ";
  char str2[]="world";
  char str3[13];
   strcpy(str3 ,str1);
     strcat(str3,str2);
 printf( "String = %s\n", str3);
Если помог напиши одобрение(иконка весов слева под ником)
rus12 вне форума Ответить с цитированием
Старый 23.04.2011, 16:11   #12
ololo-schoolboy
Форумчанин
 
Регистрация: 25.12.2010
Сообщений: 247
По умолчанию

Цитата:
Указатель это просто ссылка на объект
поэтому такой код тоже будет работать
дело не в этом имя ОДНОМЕРНОГО массива это константный указатель на него т.е. str==&str[0]
Цитата:
Отсюда разве не следует, что strcpy(str3 ,str1); strcat(str3,str2);
str1,str2,str3 должны быть указателями на char???
да, но это не отменяет того, что память на которую они указывают должна быть доступна для записи:
Код:
char *str="Hello";
память не доступна для записи т.е. это эквивалентно
Код:
const char *str="Hello";
, а если так:
Код:
char *str=new char[20];
указатель будет указывать на память доступную для записи
Цитата:
ololo-schoolboy
Цитата:
где это вы такое вычитали)
Дело в том что об этом я не читал.Мне большв нравится все это делать вручную.
это я не тебе

да еще не заметил в посте №3 надо было сделать так:
Код:
#include <string.h>
#include <stdio.h>

void main( void )
{
   char string[80]={'\0'};
   strcat( string, "strcpy " );
   strcat( string, "and " );
   strcat( string, "strcat!" );
   printf( "String = %s\n", string );
}
ошибка была из-за того, что в string хранится мусор и среди этого мусора может оказаться 0x00, соответственно он при канкатинирует строку после 0x00 и на выводе мы получим мусор который шел до 0x00 и нашу строку
ololo-schoolboy вне форума Ответить с цитированием
Старый 23.04.2011, 18:34   #13
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Акоб, в посте №7 вы пытались складывать указатели,
Код:
char* a;
char* b;
// ...
a = a+b;
а С++ запрещает это делать.
C++ позволяет лишь вычитать указатели, прибавлять к указателю число, либо отнимать от указателя число.
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.04.2011, 22:40   #14
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Тогда зачем нужно копировать строчку в буфер обмена?
Код:
да еще не заметил в посте №3 надо было сделать так:
Код:

#include <string.h>
#include <stdio.h>

void main( void )
{
   char string[80]={'\0'};
   strcat( string, "strcpy " );
   strcat( string, "and " );
   strcat( string, "strcat!" );
   printf( "String = %s\n", string );
}
Цитата:
strcpy - копирует строку в буфер обмена
strcat( string, "strcpy " )-добавляет строку "strcpy " к переменной string
Акоб вне форума Ответить с цитированием
Старый 24.04.2011, 23:17   #15
Trust_357
Пользователь
 
Регистрация: 10.03.2011
Сообщений: 68
По умолчанию

Акоб cout нормально выводит строку
Trust_357 вне форума Ответить с цитированием
Старый 24.04.2011, 23:58   #16
RgnRok
Пользователь
 
Аватар для RgnRok
 
Регистрация: 13.01.2009
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Акоб Посмотреть сообщение
Тогда зачем нужно копировать строчку в буфер обмена?
Код:
#include <cstring>
#include <iostream>
int main()
{
	char str1[]="Mama Mula";
	char str2[]="PaMy";

//В 1ю строку заносится str1+str2
	std::cout<<"Two String= "<<strcat(str1,str2)<<'\n';
	std::cout<<str1<<'\n';

//В 1ю строку заносится только str2
	std::cout<<"Two String= "<<strcpy(str1,str2)<<'\n';

//Здесь уже будут 2 одинаковые строки (т.к str1 уже = str2)
	std::cout<<"Two String= "<<strcat(str1,str2)<<'\n';
	std::cout<<'\n'<<str1;
	getchar();
	return 0;
}
Что мы видим на выходе:

Two String=Mama MulaPaMy
Mama MulaPaMy

Two String=PaMy
Two String=PaMyPaMy
PaMyPaMy

Вообщем strcpy(to, from) записывает строку from в to (to стирается)
strcat (to, from) добавляет к окончанию строки to строку from
RgnRok вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с strcpy() TheWanderer Общие вопросы C/C++ 13 04.07.2013 03:20
Моя strcat Valter Общие вопросы C/C++ 5 12.02.2010 00:30
strcat larry Win Api 3 20.07.2009 12:44
не работает strcat(),strcpy() MeGaTpoH Общие вопросы C/C++ 5 25.01.2009 17:31
strcpy (visual c++ 6.0) JOFRIF Visual C++ 2 04.08.2008 12:19