#include<iostream>
#include<vector>
using namespace std;
int main(int argc,char** argv){
int n;
if(argc>1)
n=argv[0];
int* stuff=new int[n];
vector<int> v(100000);
delete stuff;
return 0;
}
当我尝试运行此代码片段时,我得到了一个错误,从char *到int fpermissive的无效转换。我不知道此错误表示什么。如果有人有任何想法,请帮助我找出其含义。
谢谢。
答案 0 :(得分:0)
argv是指向字符的指针,简而言之,您可以将其假定为指向字符串的指针,并将该元素直接分配给n。
n是一个字符数组。 首先通过atoi()将n转换为整数,您可以在stdlib.h中找到
我猜在C ++中是cstdlib。
答案 1 :(得分:0)
您不能分配char* pointer to an
int variable, unless you type-cast it, which is not what you need in this situation. You need to parse the
char * string using a function that interprets the *content* of the string and returns a translated integer, such as [
std :: atoi()](https://en.cppreference.com/w/cpp/string/byte/atoi), [
std :: stoi()`]({{3 }})等。
此外,如果用户在不输入命令行参数的情况下运行您的应用,则不会初始化n
。并且第一个用户输入的参数存储在argv[1]
中,argv[0]
包含调用应用程序的路径/文件名。
此外,您需要使用delete[]
而不是delete
。经验法则-一起使用new
和delete
,以及new[]
和delete[]
。或者宁愿根本不直接使用它们(而是使用std::vector
,std::make_unique<T[]>()
等)。
尝试更多类似的方法:
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int main(int argc,char** argv){
int n = 0; // <-- initialize your variables!
if (argc > 1)
n = atoi(argv[1]); // <-- [1] instead of [0]! and parse the string...
int* stuff = new int[n];
vector<int> v(100000);
delete[] stuff; // <-- use delete[] instead of delete!
return 0;
}