簡體   English   中英

itoa () 不適用於 32 位 tdm-gcc 5.1,即使包含 stdlib.h

[英]itoa () does not work on 32bit tdm-gcc 5.1 even on including stdlib.h

我有一個使用 itoa() 的 C++ 程序。 我在 64 位編譯器(TDM-GCC-5.1)上編譯它,它編譯並工作。 但是當我使用 32 位 TDM-GCC-5.1 編譯器編譯它時,我收到錯誤 itoa () 未在此范圍內聲明。 我嘗試在兩台不同的 32 位機器上編譯它,但仍然出現相同的錯誤,並且通過包含 cstdlib 和 stdlib.h 在這兩種情況下仍然出現相同的錯誤。 它在 64 位機器上編譯並運行良好。 但是為什么在 32 位編譯器上不這樣做呢??

你能建議一些 32 位的替代方案嗎?

代碼:

#include <iostream>
#include <stdlib.h>
using namespace std;

main()
{
int test;
char t[2];

itoa(test,t,10);
}

編譯器輸出:

C:\Users\hello\Desktop\Untitled1df.cpp  In function 'int main()':
C:\Users\hello\Desktop\Untitled1df.cpp  [Error] 'itoa' was not declared in this scope

截圖: IDE截圖

itoa不是標准函數。 它是由某些實現提供的,而不是由其他實現提供的。 避免在便攜式軟件中使用它。

64 位版本的 TDM GCC 在其默認模式下恰好提供 itoa,而 32 位版本則沒有。 為了保持版本之間的行為一致,請嘗試例如-std=c++11 -DNO_OLDNAMES -D_NO_OLDNAMES

例如,符合標准的替代方案是

char buffer[20];
snprintf (buffer, sizeof(buffer), "%d", number);

說到可移植性,沒有int main()是一個嚴重的錯誤,在 Windows 的某些版本的 GCC 中錯誤地沒有診斷。 這是這些版本的 GCC 中的一個錯誤。 此外,訪問未初始化的變量test會觸發未定義的行為。

暫無
暫無

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

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