C++ 在c+中扫描字符数组并将其正确放入结构中+;
想让我的字符数组位于结构中,但它崩溃了 之后我意识到,扫描阵列时也存在问题 输入字符串由两个单词组成,名称和姓氏,用空格分隔。我还没有写它扫描第二个单词的部分,所以现在它只扫描第一个单词 代码中的检查行具有奇怪的输出。我输入“James”,它会给我“J8224a8224m8224e8224s8224”,然后崩溃C++ 在c+中扫描字符数组并将其正确放入结构中+;,c++,arrays,struct,char,C++,Arrays,Struct,Char,想让我的字符数组位于结构中,但它崩溃了 之后我意识到,扫描阵列时也存在问题 输入字符串由两个单词组成,名称和姓氏,用空格分隔。我还没有写它扫描第二个单词的部分,所以现在它只扫描第一个单词 代码中的检查行具有奇怪的输出。我输入“James”,它会给我“J8224a8224m8224e8224s8224”,然后崩溃 #include <iostream> #include<string.h> using namespace std; struct base { ch
#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;i cout有几个错误:
不能对基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;istrcpy(sym,a[i].name)可能是基于结构的指针,但是你不能使它们指向任何地方。而且,技术上,你的程序不是一个有效的C++程序,因为C++没有。这是一些编译器的扩展,避免它们。<代码>base a[n]
是gcc扩展,coutYes,它是一个未完成的程序。目前我有输入字符串的奇怪输出,基本上我有“8224”在每个字符之后使用std::vector
和std::string
而不是指针、原始数组和容易出错的C函数。值得一提的是,有C++风格的方法可以实现这一点。