-8 c++
#include<iostream>
using namespace std;
int main()
{
char *name="Siva",*str;
for(int i=0;i<strlen(name);i++)
{
str[i]=name[i];
}
cout<<str;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个程序给出输出Sivaœ>即siva有一些垃圾值....但第二个程序显示分段错误...请帮我找出确切答案...
#include<iostream>
using namespace std;
int main()
{
int i=0;
char *name="Siva",*str;
for(i=0;i<strlen(name);i++)
{
str[i]=name[i];
}
cout<<str;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
char *name="Siva",*str;
for(int i=0;i<strlen(name);i++)
{
str[i]=name[i];
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
更好的是,摆脱手写循环:
#include <algorithm>
int main()
{
char *name="Siva";
std::string str;
std::copy (name, name + strlen (name), std::back_inserter (str));
cout<<str;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
甚至更好,在这个特定的例子中没有理由为什么你需要做任何这些:
char* name = "Silva";
std::string str = name;
cout << str;
Run Code Online (Sandbox Code Playgroud)
顺便说一下,C++中的字符串文字本质上是const:
const char* name = "Silva";
Run Code Online (Sandbox Code Playgroud)
如果你真的必须使用a 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;
}
Run Code Online (Sandbox Code Playgroud)
我甚至会更强烈地质疑你需要逐字节复制它:
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;
}
Run Code Online (Sandbox Code Playgroud)