Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/14: Рейтинг темы: голосов - 14, средняя оценка - 4.64
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
1

error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл

14.09.2013, 08:22. Показов 2580. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста как быть... в конструктор приходит *int и мне нужно создать файл, с именем таким же, что и значение, которое приходит по этому адресу.

C++
1
2
3
4
5
6
7
8
9
10
List(int *flightNumber)
{
     char s1[] = ".txt";
     char *s2 = itoa(*flightNumber, s1, 16); // ошибка на этой строчке
     char s3[30];
     strcpy(s3, s1);
     strcat(s3, s2);
     printf("буфер после копирования: \"%s\"\n", s3);
      
}
Текст ошибки: Необработанное исключение в "0x00021a38" в "prog.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000001".

Я погуглил и вот так вот можно делать:
C++
1
2
3
4
 
    int a;
    int *b = 5; // error C2440: инициализация: невозможно преобразовать 'int' в 'int *'    
    a = b; // error C2440: =: невозможно преобразовать 'int *' в 'int'
Подскажите пожалуйста как правильно к обычной интовой переменной присвоить значение из *int
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2013, 08:22
Ответы с готовыми решениями:

error C2664: Display: невозможно преобразовать параметр 1 из 'int [5]' в 'int"
Добрый вечер! Прошу помочь, так как сам только начал изучать СПП (поэтому отнеситесь с...

error C2664: InputMatrixCurrent: невозможно преобразовать параметр 1 из 'int [5][5]' в 'int'
Помогите поправить код, а то выдаёт ошибки #include "stdafx.h" #include "iostream" using...

Исправить ошибку C2664: fcvt: невозможно преобразовать параметр из "int" в "int *"
ПИшу програму перевод дробового числа с указанием количесв цифр после точки , с инт в чар !!!!Но...

выдаёт error C2440: =: невозможно преобразовать 'int' в 'int [100]
Ввести информацию об абонентах телефонной станции: фамилия, телефон, улица. Распечатать список...

16
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
14.09.2013, 08:24 2
C++
1
void* itoa(int input, char *buffer, int radix) ;
Википедия: itoa (Си)
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 08:36  [ТС] 3
Если я на вход itoa() подам просто int, пример:

C++
1
2
3
4
5
6
7
char s1[10] = ".txt";
char s2[10]; 
itoa(44, s2, 10);
char s3[30];
strcpy(s3, s2);
strcat(s3, s1);
printf("буфер после копирования: \"%s\"\n", s3);
то на выходе s3 = "44.txt"

Добавлено через 1 минуту
Цитата Сообщение от Croessmah Посмотреть сообщение
int input
вот в чем тут косяк, он принимает чистый int, а не указатель, да? Но мне в конструктор приходит именно указатель *int. Подскажите пожалуйста как в itoa передать интовое значение из *flightNumber
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
14.09.2013, 08:38 4
Цитата Сообщение от kpoxaa Посмотреть сообщение
Текст ошибки: Необработанное исключение в "0x00021a38" в "prog.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000001".
все правильно
куда пишешь то?
Цитата Сообщение от kpoxaa Посмотреть сообщение
char *s2 = itoa(*flightNumber, s1, 16); // ошибка на этой строчке
в инициализированную строку, сиречь в константу
Цитата Сообщение от kpoxaa Посмотреть сообщение
char s2[10];
itoa(44, s2, 10);
и это правильно
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 08:40  [ТС] 5
C++
1
2
3
4
5
6
7
8
char s1[10] = ".txt";
char s2[10]; 
itoa(*flightNumber, s2, 10); // Необработанное исключение в "0x01201a40" в "kyrsach_2.exe": 0xC0000005: 
                                      // Нарушение прав доступа при чтении "0x00000001".
char s3[30];
strcpy(s3, s2);
strcat(s3, s1);
printf("буфер после копирования: \"%s\"\n", s3);
Так корректнее записать? Но ошибка... невнятная совершенно(

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
char s2[10];
itoa(44, s2, 10);
вот так вот правильно? с простым целым числом работает все хорошо. Но если передать указатель, то оно не хочет из него брать значение
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
14.09.2013, 08:41 6
Цитата Сообщение от kpoxaa Посмотреть сообщение
ак корректнее записать? Но ошибка... невнятная совершенно(
покажи как вызываешь функцию?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
14.09.2013, 08:41 7
Цитата Сообщение от kpoxaa Посмотреть сообщение
Так корректнее записать? Но ошибка... невнятная совершенно(
пример создания объекта List?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.09.2013, 08:49 8
В отладчике посмотрите, что приходит в функцию. Может указатель невалидный.
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 08:51  [ТС] 9
Это конструктор, вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int _tmain(int argc, _TCHAR* argv[])
{
    MainList mainList;
    int *flightNumber;
    printf("\nВведите номер: ");    
    scanf("%d", &flightNumber);
    mainList.addLast(flightNumber);
    
}
void addLast(int *flightNumber)
{
    List *newItem = new List(flightNumber);
}
List(int *flightNumber)
{
    this->flightNumber = flightNumber; // эта строка работает корректно, 
                                // в переменную структуры записывается то, что приходит
/*
А вот так ошибка...
char s1[10] = ".txt";
char s2[10]; 
itoa(*flightNumber, s2, 10);
char s3[30];
strcpy(s3, s2);
strcat(s3, s1);
*/
}
Добавлено через 1 минуту
Но ведь если бы *flightNumber в конструктор приходил NULL, то this. .... не записывал бы значение, которое приходит. А он записывает так как нужно.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
14.09.2013, 08:57 10
Цитата Сообщение от kpoxaa Посмотреть сообщение
int *flightNumber;
printf("\nВведите номер: ");
scanf("%d", &flightNumber);
mainList.addLast(flightNumber);
расскажи пожалуйста что ты хотел получить и накой ляд тебе указатель?
пойдем по шагам
Цитата Сообщение от kpoxaa Посмотреть сообщение
int *flightNumber;
объявим указатель, который на данный момент указывает в никуда
Цитата Сообщение от kpoxaa Посмотреть сообщение
scanf("%d", &flightNumber);
вот здесь ты присваиваешь указателю, нет не число, а адрес в памяти на который будет указывать указатель, даже если ты не ошибешься и он будет указывать на правильный диапазон, то в памяти то все равно мусор
Цитата Сообщение от kpoxaa Посмотреть сообщение
mainList.addLast(flightNumber);
и вот здесь ты отдаешь совершенно неправильный указатель

попробуй так
C++
1
2
3
MainList mainList;
int aaa=5;
mainList.addLast(&aaa);
и посмотри что будет
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 09:08  [ТС] 11
А почему тогда вот эта строка заносит правильное значение? Именно то, которые я ввел с клавиатуры в мейне:

this->flightNumber = flightNumber;

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
расскажи пожалуйста что ты хотел получить и накой ляд тебе указатель?
указатель потому, что в структуре есть переменная: int *flightNumber; и для этого объекта я ее так инициализирую.
или лучше к чертям убрать все указатели и сделать все с нормальными переменными... я уже 6 часов не могу сделать это задание(
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
14.09.2013, 09:15 12
Цитата Сообщение от kpoxaa Посмотреть сообщение
int *flightNumber; и для этого объекта я ее так инициализирую.
где ты её инициализируешь?
чтобы указатель указывал правильно нужно выделить память
например так
C++
1
int * aa=new int;// выделили память под переменную типа int, указатель указывает на эту память
или так
C++
1
2
int bb=5;// объявили переменную и инициализировали её, получается выделили память
int * aa=&bb;// указатель указывает на адрес памяти где лежит  bb
Добавлено через 1 минуту
Цитата Сообщение от kpoxaa Посмотреть сообщение
А почему тогда вот эта строка заносит правильное значение? Именно то, которые я ввел с клавиатуры в мейне:
this->flightNumber = flightNumber;
она и будет заносить что ты завел с клавы
но обращение по этому адресу вызовет крах программы
почитай что такое указатели и с чем их едят
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 09:20  [ТС] 13
угу... тоесть значение хранит верное, а адрес крах? я понял... хорошо!

Добавлено через 1 минуту
а я память нигде не выделял... я просто давал значение и думал, что оно само выделяется раз инициализируется чем-то.
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
14.09.2013, 09:22 14
Цитата Сообщение от kpoxaa Посмотреть сообщение
угу... тоесть значение хранит верное, а адрес крах? я понял... хорошо!
нет ты не понял
ты вводишь например 5
он его и хранит, но это не значения в том виде которые ты думаешь
это адрес памяти , введенный тобой
и при обращении по адресу 5, будет крах
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 09:34  [ТС] 15
получается:

int *flightNumber;
scanf("%d", &flightNumber);

я думал, что когда я так делаю в определенный участок памяти заносится то, что я ввожу, тоесть конкретно int значение. но получается, что это указываю адрес памяти? и все...

Чтобы было так как мне нужно, нужно выделить память, а только потом задавать значение? Тогда в этой области памяти будет хранится, то что мне нужно?

вот так?
int * a = new int;
scanf("%d", &a);
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
14.09.2013, 09:38 16
Цитата Сообщение от kpoxaa Посмотреть сообщение
вот так?
не совсем
или так
C++
1
2
int * a = new int;
scanf("%d",a);
или так
C++
1
2
int  a ;
scanf("%d", &a);
но учти что для каждого new нужен свой delete, который вызывается когда переменная уже не нужна
0
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
14.09.2013, 09:44  [ТС] 17
Да, хорошо. Спасибо большое!!!
0
14.09.2013, 09:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2013, 09:44
Помогаю со студенческими работами здесь

Ошибка error C2440: инициализация: невозможно преобразовать 'int' в 'int []'
// ConsoleApplication9.cpp: определяет точку входа для консольного приложения. // #include...

невозможно преобразовать параметр 4 из 'int' в 'int []'
#include "stdafx.h" #include "iostream" void Your_array (int n, int m, int x); void...

Невозможно преобразовать параметр 1 из 'int [9]' в 'int'
Что не так в коде? #include <iostream> #include <string> using namespace std; const int MAX =...

невозможно преобразовать параметр 3 из 'int [8][5]' в 'int **'
#include "stdafx.h" #include "iostream" void Your_array (int n, int m, int **x); using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru