C++ 在c+中扫描字符数组并将其正确放入结构中+;

C++ 在c+中扫描字符数组并将其正确放入结构中+;,c++,arrays,struct,char,C++,Arrays,Struct,Char,想让我的字符数组位于结构中,但它崩溃了 之后我意识到,扫描阵列时也存在问题 输入字符串由两个单词组成,名称和姓氏,用空格分隔。我还没有写它扫描第二个单词的部分,所以现在它只扫描第一个单词 代码中的检查行具有奇怪的输出。我输入“James”,它会给我“J8224a8224m8224e8224s8224”,然后崩溃 #include <iostream> #include<string.h> using namespace std; struct base { ch

想让我的字符数组位于结构中,但它崩溃了

之后我意识到,扫描阵列时也存在问题

输入字符串由两个单词组成,名称和姓氏,用空格分隔。我还没有写它扫描第二个单词的部分,所以现在它只扫描第一个单词

代码中的检查行具有奇怪的输出。我输入“James”,它会给我“J8224a8224m8224e8224s8224”,然后崩溃

#include <iostream>
#include<string.h>

using namespace std;
struct base
{
    char* name;
    char* surname;
    int point1;
    int point2;
};
main()
{
    setlocale(LC_ALL, "rus");
    int n;
    cin >> n;
    base a[n];
    char symb;
    char sym[20];
    int j = 0;
    for (int i = 0; i < n; i++)
    {
        do
        {
            symb = getchar();
            sym[j] = symb;
            j++;
        } while (symb != ' ');

        for (int k = 0; k < j; k++) //check
            cout << sym[k] << '  ';  //check

        strcpy(sym, a[i].name);
        j = 0;
    }
}
#包括
#包括
使用名称空间std;
结构基
{
字符*名称;
查*姓;
int点1;
int点2;
};
main()
{
setlocale(LC_ALL,“rus”);
int n;
cin>>n;
碱基a[n];
字符符号;
char-sym[20];
int j=0;
对于(int i=0;icout有几个错误:

  • 不能对基a[n]使用静态初始化,因为编译时变量n未知
  • 在执行strcpy之前,必须初始化[i].名称
  • 如果你知道长度是j,你应该用sptncpy而不是strcpy
  • 您的代码应该是这样的

    int main()
    {
        setlocale(LC_ALL, "rus");
        int n;
        cin >> n;
        base *a = new base[n];
        char symb;
        char sym[20];
        int j = 0;
        for (int i = 0; i<n; i++)
        {
            do
            {
                symb = getchar();
                sym[j] = symb;
                j++;
            } while (symb != ' ');
    
            for (int k = 0; k<j; k++) //check
                cout << sym[k] << ' ';  //check
    
            a[i].name = new char[j];
            strncpy(sym, a[i].name, j);
            j = 0;
        }
    }
    
    intmain()
    {
    setlocale(LC_ALL,“rus”);
    int n;
    cin>>n;
    基准*a=新基准[n];
    字符符号;
    char-sym[20];
    int j=0;
    
    对于(int i=0;i
    strcpy(sym,a[i].name)可能是基于结构的指针,但是你不能使它们指向任何地方。而且,技术上,你的程序不是一个有效的C++程序,因为C++没有。这是一些编译器的扩展,避免它们。<代码>base a[n]
    是gcc扩展,
    coutYes,它是一个未完成的程序。目前我有输入字符串的奇怪输出,基本上我有“8224”在每个字符之后使用
    std::vector
    std::string
    而不是指针、原始数组和容易出错的C函数。值得一提的是,有C++风格的方法可以实现这一点。