C++ char*问题

-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)

Joh*_*ing 5

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)