Неверное преобразование из char * в int fpermissive - PullRequest
0 голосов
/ 04 мая 2019
#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 голосов
/ 04 мая 2019

Вы не можете назначить 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 () `] (https://en.cppreference.com/w/cpp/string/basic_string/stol), и т. Д.

Кроме того, вы не инициализируете 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;
}
0 голосов
/ 04 мая 2019

argv - это указатель на указатель на символ, который вкратце можно принять за указатель на строку и назначить элемент этого непосредственно n.

n - массив символов. Сначала преобразуйте n в целое число с помощью atoi (), которое вы можете найти в stdlib.h

Я думаю, в C ++ это cstdlib.

...