char *name="Siva",*str;
for(int i=0;i<strlen(name);i++)
{
str[i]=name[i];
}
str
- указатель, но это еще не указывает на что-либо.
Поскольку вы в C++, вы должны использовать std::string
:
#include<iostream>
#include <string>
using namespace std;
int main()
{
char *name="Siva";
std::string str;
for(int i=0;i<strlen(name);i++)
{
str += name[i];
}
cout<<str;
return 0;
}
Еще лучше, чтобы избавиться от рукописного цикла:
#include <algorithm>
int main()
{
char *name="Siva";
std::string str;
std::copy (name, name + strlen (name), std::back_inserter (str));
cout<<str;
return 0;
}
Лучше даже еще, нет никаких причин, в этом конкретном примере, почему вы должны сделать что-либо из этого:
char* name = "Silva";
std::string str = name;
cout << str;
Кстати, строковые литералы в C++ являются по своей сути const
:
const char* name = "Silva";
Если вы действительно должны использовать char*
, сначала я бы сильно вопрос, почему, и тогда я сказал бы вам, чтобы сделать это:
int main()
{
const char *name="Siva";
char* str = new char [strlen (name)+1]; // +1 for the null terminator
strcpy (name, str);
cout << str;
delete [] str;
return 0;
}
Я бы еще сильнее вопрос вашу потребность, чтобы скопировать его байт за байтом:
int main()
{
const char *name="Siva";
char* str = new char [strlen (name)+1]; // +1 for the null terminator
for (size_t i = 0; i < strlen (name); ++i)
str [i] = name [i];
str [strlen (name)] = '\0';
cout << str;
delete [] str;
return 0;
}
Что вы пишете _to_? Что означает 'str' point _at_? – sehe
Что бы вы хотели ответить ** тоже **? Вы только описали, как ведут себя ваши программы, а не то, что проблема, или то, что вы хотите, чтобы они делали или что вы ожидаете от них – jalf
. Тогда как это дает ответ для первого случая ...... – user2390140