itoa功能问题

时间:2010-09-26 20:11:22

标签: c++ portability itoa

我正在使用我的C ++项目中的Ubuntu环境中的Eclipse。

我使用itoa函数(在Visual Studio上完美运行),编译器抱怨itoa未声明。

我添加了<stdio.h><stdlib.h><iostream>,但没有帮助。

6 个答案:

答案 0 :(得分:10)

www.cplusplus.com说:

此函数未在ANSI-C中定义,不是C ++的一部分,但有些编译器支持。

因此,我强烈建议您不要使用它。但是,您可以使用stringstream非常直接地实现此目的,如下所示:

stringstream ss;
ss << myInt;
string myString = ss.str();

答案 1 :(得分:5)

提升方式:

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

答案 2 :(得分:4)

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;
}

答案 3 :(得分:2)

itoa依赖于编译器,因此最好使用以下方法: -

方法1:如果你使用的是c ++ 11,那就去std :: to_string吧。它会起作用。

方法2:sprintf适用于c&amp; 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编译。

C ++ sprintf:

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

答案 4 :(得分:1)

你可以使用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

答案 5 :(得分:0)

您是否包含stdlib.h? (或者更确切地说,因为你正在使用C ++,cstdlib)