2012-05-30 39 views
3

我想格式化一個c字符串,如printf。例如:C - 格式字符數組像printf

char string[] = "Your Number:%i"; 
int number = 33; 
// String should now be "Your Number:33" 

有沒有圖書館或者我可以做到這一點的好方法?

+3

你有'sprintf'? – cnicutar

回答

10
int main() { 
    char str[] = "Your Number:%d"; 
    char str2[1000]; 
    int number = 33; 
    sprintf(str2,str,number); 
    printf("%s\n",str2); 
    return 0; 
} 

輸出:

---------- Capture Output ---------- 
> "c:\windows\system32\cmd.exe" /c c:\temp\temp.exe 
Your Number:33 

> Terminated with exit code 0. 
+1

如果您使用長度爲1001的字符串調用sprintf(),該怎麼辦? (回答:一個很好的段錯誤,用snprintf()代替) – 2012-05-30 16:37:10

+0

謝謝,我已經想過我記得存在這樣一個函數,但不記得它是如何被調用的。 –

+0

@ H2C03 - 嗯,我的編譯器似乎沒有這個功能(MS Visual Studio 2008 C++)。雖然好主意,但我不確定它是否適用於所有編譯器。 – dcp

0

爲了調試我的Arduino的草圖,我習慣性地使用此解決方案,從Madivad的回答帶到How do I print multiple variables in a string?

您可以將此功能添加到您的草圖中,該功能允許您使用printf(),儘管它落入了float,%f

// Function that printf and related will use to print 
int serial_putchar(char c, FILE* f) { 
    if (c == '\n') serial_putchar('\r', f); 
    return Serial.write(c) == 1? 0 : 1; 
} 

加入全球

FILE serial_stdout; 

,並把這個setup()

fdev_setup_stream(&serial_stdout, serial_putchar, NULL, _FDEV_SETUP_WRITE); 
stdout = &serial_stdout; 

一個例子素描是:

// Function that printf and related will use to print 
int serial_putchar(char c, FILE* f) { 
    if (c == '\n') serial_putchar('\r', f); 
    return Serial.write(c) == 1? 0 : 1; 
} 

FILE serial_stdout; 


void setup(){ 
    Serial.begin(9600); 

    // Set up stdout 
    fdev_setup_stream(&serial_stdout, serial_putchar, NULL, _FDEV_SETUP_WRITE); 
    stdout = &serial_stdout; 

    printf("My favorite number is %6d!\n", 12); 
} 

void loop() { 
    static long counter = 0; 
    if (millis()%300==0){ 
    printf("millis(): %ld\tcounter: %ld (%02X)\n", millis(), counter, counter++); 
    delay(1);  
    } 
}