2010-02-12 82 views
1

我希望能夠做到這一點:有沒有簡單的方法來連接字符串非文字與文字?

lcd_putc("\fDeposited $" & disp_money & "\nAdd $" & temp & " more"); 

不幸的是,字符串和非文字不串接容易。我知道如何連接兩個文字,以及如何連接兩個非文字(使用strcat),但這不是我正在尋找的。誰能幫忙?

回答

2

sprintf()snprintf()對此很有幫助。

0

我想你可能會尋找sprintf

例子:

char string[50]; 
int file_number = 0; 

sprintf(string, "file.%d", file_number); 
file_number++; 
output_file = fopen(string, "w"); 
+0

你能舉個例子說明這會有什麼幫助嗎? – Adam

+0

該文檔是一個示例。如果您正在尋找內置操作員支持,則無法找到它。 –

0
char *buf = (char*)calloc(1,512); 

sprintf(buf, "\fDeposited $%0.2d\nAdd $%0.2d more", disp_money, temp); 

1

strcat就是這樣做的方法。對於更高級的級聯,請考慮sprintf

sprintf (buf, "\fDeposited $%s\nAdd $%s more", disp_money, temp); 
0

C中的內存管理是手動的。要連接字符串,您需要提供一個數組變量,其中包含足夠多的字符以保存最終結果。您可以使用malloc()將此緩衝區變量分配到堆棧中,作爲函數的本地變量或堆中。

或者,如果你打算做的是顯示字符串,你可以通過避免執行連接來避免分配緩衝區。在這種情況下,以下內容:

 
lcd_putc("\fDeposited $"); 
lcd_putc(disp_money); 
lcd_putc("\nAdd $"); 
lcd_putc(temp); 
lcd_putc(" more"); 

是一種簡單的方法來編寫您可以使用的。這種方法的缺點是由於lcd_putc()而導致開銷(如果有的話)。這種方法的優點是不需要串聯字符串。

如果當你需要連接字符串,你將要使用snprintf(),以確保您不會溢出你的緩衝區(請參閱本網站的名稱),所以不要使用sprintf()
#define STR_DEPOSITED "\fDeposited $"
#define STR_ADD "\nAdd $"
#define STR_MORE " more"
int total_length = strlen(STR_DEPOSITED) + strlen(STR_ADD) + strlen(STR_MORE) + strlen(disp_money) + strlen(temp) + 1;
char * buffer = malloc(total_length + sizeof(char));
snprintf(buffer, "%s%s%s%s%s", STR_DEPOSITED, disp_money, STR_ADD, temp, STR_MORE);

您也可以使用完成的strncpy(), strncat()同樣的事情:

只是爲了當你需要連接字符串您顯示,未來一天的方式。作爲一個方面的說明,也可以考慮在變量上使用strnlen(),以便不讀取超出非終止緩衝區的末尾。

0

字符串不是C語言中的頭等對象,所以在描述時沒有語言支持連接。然而,你可以調用很多不同的函數,給你所需要的輸出。

可能最容易使用的是sprintf。請注意,您必須提供足夠大的輸出緩衝區以容納結果字符串,並且sprintf不會執行任何邊界檢查,如果您有權訪問snprintfsprintf_s,則使用它。

char output[SUFFICIENTLY_LARGE_VALUE]; 
sprintf (output, "\fDeposited $%s\nAdd $%s more", disp_money, temp); 

在sprintf的字符串%s表示其中一個字符串參數將被插入的地方,第一%是第一個參數(disp_money)和第二%是第二個參數(溫度)。

相關問題