_itoa和itoa有什么区别?
Visual Studio对我大吼大叫使用itoa()
说使用_itoa()
代替?
它看起来像他们是相同的function。 是什么赋予了?
AC运行时库实现不应该引入不在标准中的名称,除非它们遵循某种命名约定(例如以下划线开头)。 微软编译器的早期版本没有特别严格地遵循这一规则,但随着时间的推移,微软一直在更加注重使其实现更符合标准。 因此,他们用来提供的function会侵入用户的命名空间,他们一直使用为编译器实现保留的名称来实现,并且一直在弃用旧名称。
如果定义了_CRT_NONSTDC_NO_WARNINGS
,则MS编译器不会抱怨不推荐使用itoa()
函数。 但它仍然会抱怨它不安全(你必须定义_CRT_SECURE_NO_WARNINGS
来安静地发出警告)。 或者使用更安全的函数版本( _itoa_s()
),该函数提供具有目标缓冲区大小的函数
_itoa()
和itoa()
解析为库中完全相同的函数,直到相同的地址 – 除了名称之外没有区别。
itoa()
的MSDN文档说:
从Visual C ++ 2005开始,不推荐使用此POSIX函数。请改用符合ISO C ++标准
_itoa
或security-enhanced_itoa_s
。
itoa不是标准C.
“这个函数没有在ANSI-C中定义,也不是C ++的一部分,但是有些编译器支持它。” – cplusplus.com
所以MSVS告诉你使用_itoa告诉你它不是标准的C ++,你应该这样标记它。 我认为这是为了向后兼容,并且这种表示法是为了可读性和区别。
itoa
不是标准的,所以你应该使用stringstream代替。
你需要#include
它的一个例子是:
int i = 5; std::stringstream ss; ss << i; std:: cout << ss.str();
回答布鲁斯的回答:
itoa
不是标准的,所以你应该使用stringstream代替。你需要
#include
它的一个例子是:
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(); }