проблема с функцией itoa

Я работаю над Eclipse в среде Ubuntu в своем проекте C++.

Я использую функцию itoa (которая отлично работает в Visual Studio), и компилятор жалуется, что itoa не объявлена.

Я включил <stdio.h>, <stdlib.h>, <iostream>, что не помогает.


person Aviadjo    schedule 26.09.2010    source источник
comment
выложите свой код, без него сложно помочь   -  person CharlesB    schedule 27.09.2010
comment
@CharlesB: эту проблему очень легко диагностировать без кода. Здесь нет необходимости размещать код.   -  person Ken Bloom    schedule 27.09.2010


Ответы (6)


www.cplusplus.com говорит:

Эта функция не определена в ANSI-C и не является частью C++, но поддерживается некоторыми компиляторами.

Поэтому я настоятельно рекомендую вам не использовать его. Однако вы можете добиться этого довольно просто, используя stringstream следующим образом:

stringstream ss;
ss << myInt;
string myString = ss.str();
person Component 10    schedule 26.09.2010
comment
спасибо, я попробовал его в визуальной студии, и он не распознает его, я должен что-то включать? - person Aviadjo; 27.09.2010
comment
Ошибка 4 ошибка C2079: 'streamstringKey' использует неопределенный класс 'std::basic_stringstream‹_Elem,_Traits,_Alloc›' h:\workspace\hw5\hw5\vehicle.cpp 151 - person Aviadjo; 27.09.2010
comment
Ошибка 8 ошибка C2228: слева от '.str' должен быть класс/структура/объединение h:\workspace\hw5\hw5\vehicle.cpp 154 ​​Ошибка 6 ошибка C2297: '‹‹': недопустимый, правый операнд имеет тип 'char < i>const ' h:\workspace\hw5\hw5\vehicle.cpp 153 const string Vehicle::GetKey() const{ stringstream streamstringKey; streamstringKey ‹‹ GetTypeNum(); streamstringKey ‹‹ m_licenseId; //m_licenseId — это char string stringKey = streamstringKey.str(); вернуть ключ строки потока; } - person Aviadjo; 27.09.2010

itoa() не является частью какого-либо стандарта, поэтому вам не следует его использовать. Есть лучшие способы, т.е.

C:

int main() {
    char n_str[10];
    int n = 25;

    sprintf(n_str, "%d", n);

    return 0;
}

C++:

using namespace std;
int main() {
    ostringstream n_str;
    int n = 25;

    n_str << n;

    return 0;
}
person David Titarenco    schedule 26.09.2010
comment
на самом деле мне нужно добавить int к строке. - person Aviadjo; 27.09.2010
comment
Итак, могу ли я сделать это без ostringstream, потому что мой компилятор его не распознает. - person Aviadjo; 27.09.2010

Способ повышения:

string str = boost::lexical_cast<string>(n);

person dimba    schedule 26.09.2010

itoa зависит от компилятора, поэтому лучше использовать следующие методы: -

метод 1: если вы используете С++ 11, просто выберите std::to_string. Это поможет.

метод 2: sprintf работает как для C, так и для C++. ex- ex - to_string

#include <bits/stdc++.h>
using namespace std;
int main ()
{
  int i;
  char buffer [100];
  printf ("Enter a number: ");
  scanf ("%d",&i);

  string str = to_string(i);
  strcpy(buffer, str.c_str());

  cout << buffer << endl;
  return 0;
}

Примечание. Компилируйте с использованием -std=c++0x.

С++ спринтф:

int main ()
{
int i;
  char buffer [100];
  printf ("Enter a number: ");
  scanf ("%d",&i);
  sprintf(buffer, "%d", i);
  return 0;
}`
person Shaky99    schedule 06.09.2015

вы можете использовать sprintf

char temp[5];
temp[0]="h"
temp[1]="e"
temp[2]="l"
temp[3]="l"
temp[5]='\0'
sprintf(temp+4,%d",9)
cout<<temp;

вывод будет: hell9

person pari    schedule 18.07.2017

Вы включили stdlib.h? (Вернее, поскольку вы используете C++, cstdlib)

person Martin Törnwall    schedule 26.09.2010
comment
Это не обязательно поможет, так как itoa нестандартен. - person Keith Thompson; 13.09.2011