//компилирую в Dev c++ v4.9.9.2.
#include <iostream>
using namespace std;
string intToStr(int val);
int main(){
int num=21,dec =10;
string str;
//char* buf;
//itoa(num, buf ,dec);
//str = (const char*)buf;
str = intToStr(num); // Ошибка сегментации.
cout<<" Str: " << str << endl;
system("pause");
}
string intToStr(int val){
char* buf;
string str;
itoa(val, buf ,10);
str = (const char*)buf;
return str;
}
intToStr ошибка.
Код:
Немогу понять в чём дело.
Если выделяю код в отдельную функцию, программа фварийно завершается, и вылетает ошибка.(Ошибка сегментации)
Если не выделяю то всё работает нормально.
То, что ошибка возникает не всегда - чистая случайность.
Цитата:
У вас память под буфер вообще не выделяется!
Что требует функция то я и передаю.)
Код:
//stdlib.h
_CRTIMP char* __cdecl _itoa (int, char*, int);
_CRTIMP char* __cdecl _itoa (int, char*, int);
Думаю что по указателю можно присвоить строку любой длинны.
char* buf="9999999999999999999";
Код:
#include <iostream>
using namespace std;
string intToStr(int val);
int main(){
int num=999999999,dec =10; //num большого размера.
string str;
char* buf;
itoa(num, buf ,dec); //всё пучком!!!
str = (const char*)buf;
//str = intToStr(num);
cout<<" Str: " << str << endl;
system("pause");
}
using namespace std;
string intToStr(int val);
int main(){
int num=999999999,dec =10; //num большого размера.
string str;
char* buf;
itoa(num, buf ,dec); //всё пучком!!!
str = (const char*)buf;
//str = intToStr(num);
cout<<" Str: " << str << endl;
system("pause");
}
Код:
То, что ошибка возникает не всегда - чистая случайность.
Случайно не может быть постоянно.
Цитата: Apprentice2
itoa(num, buf ,dec); //всё пучком!!!
:facepalm:
itoa
str should be an array long enough to contain any possible value
Надо так:
Код:
char*buf=new char[10];
itoa(num,buf,10);
//...
delete [] buf;
itoa(num,buf,10);
//...
delete [] buf;
Код:
string intToStr(int val){
char buf[16];
string str;
itoa(val, buf ,10);
str = (const char*)buf;
return str;
}
char buf[16];
string str;
itoa(val, buf ,10);
str = (const char*)buf;
return str;
}
Память выделится на стёке, и так быстрей по перфомансу.
Понял, функции надо передать указатель, но указатель на массив.Либо сам массив.
Я просто вначале подумал что указателю присваеваится конвертированная строка и возвращяется.
Я просто вначале подумал что указателю присваеваится конвертированная строка и возвращяется.
Код:
#include <iostream>
using namespace std;
char* itox(int sum, char* str, int dec);
int main(){
char* buf;
buf =itox(0, buf,0);
cout<<" Buf: " << buf <<endl;
system("pause");
}
char* itox(int sum, char* str, int dec){
char buf[10]={'9','9','9'}; //внутренний буфер для обработки.
for(int x=0;x<=2 ;++x) //обработка.
--buf[x];
str = buf;
return str;
}
using namespace std;
char* itox(int sum, char* str, int dec);
int main(){
char* buf;
buf =itox(0, buf,0);
cout<<" Buf: " << buf <<endl;
system("pause");
}
char* itox(int sum, char* str, int dec){
char buf[10]={'9','9','9'}; //внутренний буфер для обработки.
for(int x=0;x<=2 ;++x) //обработка.
--buf[x];
str = buf;
return str;
}