2010-04-15 213 views
1

這是一個非常非常基本的問題,我知道一個辦法是做到以下幾點:轉換一個int爲char *

char buffer[33]; 
itoa(aq_width, buffer,10); 

其中aq_width是整型,但我不能保證什麼大小緩衝區我需要爲了做到這一點......我總是可以分配一個非常大的緩衝區大小,但這不會很好......任何其他漂亮和簡單的方法來做到這一點?

+6

C和C++的答案是完全不同的,你實際上是在編程嗎? – 2010-04-15 02:30:57

回答

4
std::stringstream ss; 
ss << 3; 
std::string s = ss.str(); 
assert(!strcmp("3", s.c_str())); 
+0

或'assert(「3」== s);' – user102008 2011-03-18 05:52:50

0

從glibc的一個很好的功能是asprintf,使用像

char * buffer = NULL; 
int buffer_size = asprintf(&buffer,"%d",aq_width); 
assert(buffer_size >= 0); 
... 
free(buffer) 

將分配緩衝區爲您服務。

更便攜的是你可以使用snprintf,它會返回你需要分配的字符數。

+0

如果他使用'itoa',他可能不使用glibc ... – 2010-04-15 02:33:16

0

有更多的內存有效的方法來做到這一點,但它們不是「簡單」的。

考慮100字節內存的成本,比如說一秒鐘。一個10年的生存期的技嘉費用,10美元?我們在這裏討論納米劑。

使緩衝區太大。請注意,一個32位的int不能超過10位十進制數,而一個64位的int不能超過20.

2

您可以計算所需大小的上限緩衝區使用本宏(符號類型):itoa()

#define MAX_SIZE(type) ((CHAR_BIT * sizeof(type) - 1)/3 + 2) 

順便說一句,是不是標準的C,而不是隨處可見。 snprintf()將完成這項工作:

char buffer[MAX_SIZE(aq_width)]; 
snprintf(buffer, sizeof buffer, "%d", aq_width);