c++ - 如何在不知道将创建多少对象的情况下初始化对象指针向量?
问题描述
此代码运行不正常,因为它在代码块上不断返回 0xC0000005,在 CMD 上没有任何反应。我在网上查了一下,它说我应该在写入之前初始化向量但是如果我不知道用户要输入多少对象,我该如何初始化对象向量(因为它应该增加用户的更多输入用途)。
#include <string>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
class stock {
private:
int sharenumber;
float shareprice;
string sharename;
public:
stock(int x, string y,float z)
:sharenumber(x),sharename(y),shareprice(z)
{
cout<<"An object has been created";
}
string getstring(){
return sharename;
}
};
int toint(char * x){
int y;
y = atoi(x);
return y;
}
string tostring(char * x){
stringstream ss;
string z;
ss<<x;
z = ss.str();
return z;
}
float tofloat(char * x){
float u;
u = atof(x);
return u;
}
int main(int argc, char *argv[])
{
char str1[]= "buy";
vector <stock*> P_obj;
if (strcmp(str1,argv[1]) == 0){
cout<<"this ran"<<endl;
P_obj.push_back(new stock(toint(argv[2]),tostring(argv[3]),tofloat(argv[4])));
cout<<P_obj[0]->getstring();
}
return 0;
}
解决方案
在使用输入之前,您应该检查输入的数量。该argc
参数将指示作为命令行参数给出了多少输入(包括第一个参数,它通常是可执行文件的名称)。
int main(int argc, char *argv[])
{
char str1[]= "buy";
vector <stock*> P_obj;
if (argc > 1){ // check the number of input
if (strcmp(str1,argv[1]) == 0){
cout<<"this ran"<<endl;
if (argc > 4) { // check the number of input
P_obj.push_back(new stock(toint(argv[2]),tostring(argv[3]),tofloat(argv[4])));
cout<<P_obj[0]->getstring();
} else {
cout<<"too few arguments for "<<str1<<endl;
}
}
} else {
cout<<"no command"<<endl;
}
return 0;
}
推荐阅读
- ruby-on-rails - 是否可以在同一个 Rails 应用程序上拥有多个具有不同域名的网站?
- python - protobuf 数据解析返回错误结果
- tensorflow - 当我在 Anaconda Prompt 中更新 tensorflow 和 keras 时,这条消息意味着什么?是错还是好的?
- sql - 使用活动记录来实现这个sql是更好的方法吗?
- django - 如何在Angular中设置惰性模块文件加载路径,js文件在Apache中找不到
- apache-kafka - 如何在 Flink 程序中逐行读取 Kafka Topic
- javascript - Phaser3:检测精灵碰撞
- php - 实时提交html表单信息到其他网站
- python - 为什么我不能循环保存图像?
- javascript - clipboard.js ios12 UIWebView 无法复制