从char *到int fpermissive的无效转换

时间:2019-05-04 01:30:06

标签: c++ pointers char int

#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的无效转换。我不知道此错误表示什么。如果有人有任何想法,请帮助我找出其含义。

谢谢。

2 个答案:

答案 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。经验法则-一起使用newdelete,以及new[]delete[]。或者宁愿根本不直接使用它们(而是使用std::vectorstd::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;
}