我目前正在使用支持ANSI C的PLC,但是使用自己的GNU編譯器,它不編譯任何可變參數函數和itoa之類的東西。所以使用sprintf & co。不是將整數轉換爲字符串的選項。任何人都可以引導我到一個站點,其中列出了一個強大的,無需sprintf的itoa實現,或者在這裏發佈一個合適的算法?提前致謝。ANSI C,不帶可變參數函數的字符串
回答
這是選自K & R:
void itoa(int n, char s[])
{
int i, sign;
if ((sign = n) < 0) /* record sign */
n = -n; /* make n positive */
i = 0;
do { /* generate digits in reverse order */
s[i++] = n % 10 + '0'; /* get next digit */
} while ((n /= 10) > 0); /* delete it */
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
reverse(s);
}
reverse()
只是反轉的字符串。
請小心使用此版本,因爲它可能會溢出緩衝區。 – 2010-01-26 08:39:58
是的,的確如此。調用者必須知道緩衝區是否有足夠的空間。就像'sprintf()'。 – 2010-01-26 08:42:08
這就是爲什麼你永遠不應該使用'sprintf()'而只能使用'snprintf()' – 2010-01-26 08:48:37
只是爲了完整性和作爲其他人可能偶然發現的主題的參考,我將這個鏈接添加到itoa itoa recursively的遞歸實現中,我喜歡它,因爲它的簡單美,但不能用於我的目標系統。
- 1. 可變參數函數(不帶參數!)
- 2. Initilizing字符**字符串ANSI C的肥皂結構函數的參數使用
- 3. C++傳遞字符串可變參數
- 4. 函數調用使用字符串文字但不帶字符串變量C
- 5. 不帶引號的函數的字符串參數
- 6. 傳遞C字符串中的可變長度數組作爲函數參數
- 7. 帶有可變參數的函數作爲函數C++的參數
- 8. C函數(不帶參數)與參數
- 9. QT C++函數與字符串的可選參數
- 10. 可變參數模板構造函數不帶x參數
- 11. 使用可變參數函數連接字符串
- 12. 新函數()帶有可變參數
- 13. C函數:將帶符號參數的函數賦值爲無符號變量
- 14. Angular2:獲取不帶參數的字符串作爲字符串
- 15. 可變數目參數的C函數
- 16. 在C中帶有可變參數的函數的包裝器
- 17. ANSI C分割字符串
- 18. 錯誤:「net.sf.sahi.plugin.DBClient」的Java構造函數帶有參數「字符串,字符串,字符串,字符串」未找到
- 19. 可變參數字符串比較
- 20. C可變參數函數如何從輸入獲取字符串
- 21. 帶有2個參數的字符串中的Javascript函數
- 22. 帶參數列表的字符串中的Lua函數調用
- 23. 帶參數的preg_replace_callback函數名字符串
- 24. 執行帶有參數的函數從字符串
- 25. C中的可變參數函數
- 26. 可變參數函數的objective-c宏
- 27. 帶C字符串的函數永不返回
- 28. C vfprintf函數不能與字符串參數一起使用
- 29. C,帶有可變參數的功能
- 30. C#可變長度字符串數組
所以它不支持ANSI C. – KeatsPeeks 2010-01-26 08:34:13
嗯。這確實是與SPC提供商營銷部門正在進行的討論;) – NullAndVoid 2010-01-26 11:53:12