2010-01-26 49 views
4

我目前正在使用支持ANSI C的PLC,但是使用自己的GNU編譯器,它不編譯任何可變參數函數和itoa之類的東西。所以使用sprintf & co。不是將整數轉換爲字符串的選項。任何人都可以引導我到一個站點,其中列出了一個強大的,無需sprintf的itoa實現,或者在這裏發佈一個合適的算法?提前致謝。ANSI C,不帶可變參數函數的字符串

+4

所以它不支持ANSI C. – KeatsPeeks 2010-01-26 08:34:13

+1

嗯。這確實是與SPC提供商營銷部門正在進行的討論;) – NullAndVoid 2010-01-26 11:53:12

回答

6

這是選自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()只是反轉的字符串。

+0

請小心使用此版本,因爲它可能會溢出緩衝區。 – 2010-01-26 08:39:58

+1

是的,的確如此。調用者必須知道緩衝區是否有足夠的空間。就像'sprintf()'。 – 2010-01-26 08:42:08

+0

這就是爲什麼你永遠不應該使用'sprintf()'而只能使用'snprintf()' – 2010-01-26 08:48:37

1

只是爲了完整性和作爲其他人可能偶然發現的主題的參考,我將這個鏈接添加到itoa itoa recursively的遞歸實現中,我喜歡它,因爲它的簡單美,但不能用於我的目標系統。

相關問題