Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
#1

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

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

Подскажите пожалуйста как быть... в конструктор приходит *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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 08:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос error C2664: itoa: невозможно преобразовать параметр 1 из 'int *' в 'int' + запись в файл (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,379
Записей в блоге: 3
Завершенные тесты: 1
14.09.2013, 08:24 #2
C++
1
void* itoa(int input, char *buffer, int radix) ;
Википедия: itoa (Си)
0
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
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
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
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
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
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
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
14.09.2013, 08:41 #6
Цитата Сообщение от kpoxaa Посмотреть сообщение
ак корректнее записать? Но ошибка... невнятная совершенно(
покажи как вызываешь функцию?
0
Croessmah
Эксперт CЭксперт С++
13205 / 7476 / 839
Регистрация: 27.09.2012
Сообщений: 18,379
Записей в блоге: 3
Завершенные тесты: 1
14.09.2013, 08:41 #7
Цитата Сообщение от kpoxaa Посмотреть сообщение
Так корректнее записать? Но ошибка... невнятная совершенно(
пример создания объекта List?
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.09.2013, 08:49 #8
В отладчике посмотрите, что приходит в функцию. Может указатель невалидный.
0
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
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
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
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
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
14.09.2013, 09:08  [ТС] #11
А почему тогда вот эта строка заносит правильное значение? Именно то, которые я ввел с клавиатуры в мейне:

this->flightNumber = flightNumber;

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
расскажи пожалуйста что ты хотел получить и накой ляд тебе указатель?
указатель потому, что в структуре есть переменная: int *flightNumber; и для этого объекта я ее так инициализирую.
или лучше к чертям убрать все указатели и сделать все с нормальными переменными... я уже 6 часов не могу сделать это задание(
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
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
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
14.09.2013, 09:20  [ТС] #13
угу... тоесть значение хранит верное, а адрес крах? я понял... хорошо!

Добавлено через 1 минуту
а я память нигде не выделял... я просто давал значение и думал, что оно само выделяется раз инициализируется чем-то.
0
ValeryS
Модератор
6631 / 5039 / 466
Регистрация: 14.02.2011
Сообщений: 16,845
14.09.2013, 09:22 #14
Цитата Сообщение от kpoxaa Посмотреть сообщение
угу... тоесть значение хранит верное, а адрес крах? я понял... хорошо!
нет ты не понял
ты вводишь например 5
он его и хранит, но это не значения в том виде которые ты думаешь
это адрес памяти , введенный тобой
и при обращении по адресу 5, будет крах
0
kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 446
14.09.2013, 09:34  [ТС] #15
получается:

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

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

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

вот так?
int * a = new int;
scanf("%d", &a);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 09:34
Привет! Вот еще темы с ответами:

error C2440:невозможно преобразовать 'int' в 'int []' - C++
Собственно вот сам код, жирным выделена строка в которой Visual C++ 2008 показывает ошибку. Поясните кто может что я делаю не...

error C2664: невозможно преобразовать параметр - C++
Здравствуйте. Отправьте меня если что в другую тему, где это обсуждалось, но я не понимаю, в чем собственно дело void grouping(int n,...

error C2664:невозможно преобразовать параметр - C++
#include "stdafx.h" #include <iostream> using namespace std; #include <cstring> #define q 250 struct sanat{ string Name; ...

error C2664:невозможно преобразовать параметр - C++
/*************************************************** * Программа: Квадратный трехчлен * * Лаб. работа: 5 ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.09.2013, 09:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru