簡體   English   中英

_itoa和itoa有什么區別?

[英]What is the difference between _itoa and itoa?

Visual Studio對我大吼大叫使用itoa()說使用_itoa()代替?

在我看來,它們是相同的功能。 是什么賦予了?

AC運行時庫實現不應該引入不在標准中的名稱,除非它們遵循某種命名約定(例如以下划線開頭)。 微軟編譯器的早期版本沒有特別嚴格地遵循這一規則,但隨着時間的推移,微軟一直在努力使其實現更符合標准。 因此,他們用來提供的函數會侵入用戶的命名空間,他們一直使用為編譯器實現保留的名稱來實現,並且一直在棄用舊名稱。

如果定義了_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 <sstream>

它的一個例子是:

int i = 5;
std::stringstream ss;

ss << i;

std:: cout << ss.str();

回答布魯斯的回答:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM