這是一個非常非常基本的問題,我知道一個辦法是做到以下幾點:轉換一個int爲char *
char buffer[33];
itoa(aq_width, buffer,10);
其中aq_width是整型,但我不能保證什麼大小緩衝區我需要爲了做到這一點......我總是可以分配一個非常大的緩衝區大小,但這不會很好......任何其他漂亮和簡單的方法來做到這一點?
這是一個非常非常基本的問題,我知道一個辦法是做到以下幾點:轉換一個int爲char *
char buffer[33];
itoa(aq_width, buffer,10);
其中aq_width是整型,但我不能保證什麼大小緩衝區我需要爲了做到這一點......我總是可以分配一個非常大的緩衝區大小,但這不會很好......任何其他漂亮和簡單的方法來做到這一點?
std::stringstream ss;
ss << 3;
std::string s = ss.str();
assert(!strcmp("3", s.c_str()));
或'assert(「3」== s);' – user102008 2011-03-18 05:52:50
從glibc的一個很好的功能是asprintf
,使用像
char * buffer = NULL;
int buffer_size = asprintf(&buffer,"%d",aq_width);
assert(buffer_size >= 0);
...
free(buffer)
將分配緩衝區爲您服務。
更便攜的是你可以使用snprintf
,它會返回你需要分配的字符數。
如果他使用'itoa',他可能不使用glibc ... – 2010-04-15 02:33:16
有更多的內存有效的方法來做到這一點,但它們不是「簡單」的。
考慮100字節內存的成本,比如說一秒鐘。一個10年的生存期的技嘉費用,10美元?我們在這裏討論納米劑。
使緩衝區太大。請注意,一個32位的int
不能超過10位十進制數,而一個64位的int不能超過20.
您可以計算所需大小的上限緩衝區使用本宏(符號類型):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);
C和C++的答案是完全不同的,你實際上是在編程嗎? – 2010-04-15 02:30:57