2012-05-30 53 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);  
    } 
}