itoa()
Visual Studio は、代わりに使用すると言って使用について私に怒鳴ってい_itoa()
ますか?
それらは同じ機能であるように私には見えます。何を与える?
itoa()
Visual Studio は、代わりに使用すると言って使用について私に怒鳴ってい_itoa()
ますか?
それらは同じ機能であるように私には見えます。何を与える?
AC ランタイム ライブラリの実装では、特定の命名規則 (アンダースコアで始まるなど) に従わない限り、標準にない名前を導入することは想定されていません。Microsoft のコンパイラの以前のバージョンは、この規則に特に厳密に従っていませんでしたが、時間の経過とともに、Microsoft は実装をより標準に準拠させる方向に進んでいます。そのため、彼らが提供していた関数は、ユーザーの名前空間に侵入し、コンパイラの実装用に予約されている名前を使用して実装しており、古い名前を非推奨にしています。
が定義されている場合、MS コンパイラは関数が非推奨であること_CRT_NONSTDC_NO_WARNINGS
について文句を言いません。itoa()
しかし、それはまだ安全ではないことを訴えます (_CRT_SECURE_NO_WARNINGS
その警告を静かにするように定義する必要があります)。_itoa_s()
または、関数にデスティネーション バッファ サイズを提供する、より安全なバージョンの関数 ( ) を使用します。
と の両方が、ライブラリ内の同じアドレスまでのまったく同じ関数_itoa()
にitoa()
解決されます。名前以外に違いはありません。
のMSDNドキュメントにitoa()
は次のように書かれています:
この POSIX 関数は、Visual C++ 2005 以降では非推奨です。代わりに、ISO C++ 準拠
_itoa
またはセキュリティ強化を使用してください。_itoa_s
Bruce による回答への返信:
itoa
は標準ではないため、代わりに stringstream を使用する必要があります。あなたは必要になるでしょう
#include <sstream>
使用例は次のとおりです。
int i = 5;
std::stringstream ss;
ss << i;
std:: cout << ss.str();
itoa()
代わりに独自の関数をコーディングすることもできます
例えば:
const char* itoa (int num)
{
if (num == 0)
{
return "0";
}
bool neg = false;
if (num < 0)
{
neg = true;
num = -num;
}
int digits = 0;
int tmp = num;
while (tmp > 0)
{
digits++;
tmp /= 10;
}
int digs[digits];
for (tmp = digits; num > 0; tmp--)
{
digs[tmp] = num % 10;
num /= 10;
}
string s = neg == true ? "-" : "";
for (tmp = 1; tmp <= digits; tmp++)
{
s += (char)(digs[tmp] + 48);
}
return s.c_str();
}