我希望能夠做到這一點:有沒有簡單的方法來連接字符串非文字與文字?
lcd_putc("\fDeposited $" & disp_money & "\nAdd $" & temp & " more");
不幸的是,字符串和非文字不串接容易。我知道如何連接兩個文字,以及如何連接兩個非文字(使用strcat),但這不是我正在尋找的。誰能幫忙?
我希望能夠做到這一點:有沒有簡單的方法來連接字符串非文字與文字?
lcd_putc("\fDeposited $" & disp_money & "\nAdd $" & temp & " more");
不幸的是,字符串和非文字不串接容易。我知道如何連接兩個文字,以及如何連接兩個非文字(使用strcat),但這不是我正在尋找的。誰能幫忙?
sprintf()
和snprintf()
對此很有幫助。
我想你可能會尋找sprintf
例子:
char string[50];
int file_number = 0;
sprintf(string, "file.%d", file_number);
file_number++;
output_file = fopen(string, "w");
char *buf = (char*)calloc(1,512);
sprintf(buf, "\fDeposited $%0.2d\nAdd $%0.2d more", disp_money, temp);
?
strcat
就是這樣做的方法。對於更高級的級聯,請考慮sprintf
:
sprintf (buf, "\fDeposited $%s\nAdd $%s more", disp_money, temp);
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()
,以便不讀取超出非終止緩衝區的末尾。
字符串不是C語言中的頭等對象,所以在描述時沒有語言支持連接。然而,你可以調用很多不同的函數,給你所需要的輸出。
可能最容易使用的是sprintf
。請注意,您必須提供足夠大的輸出緩衝區以容納結果字符串,並且sprintf不會執行任何邊界檢查,如果您有權訪問snprintf
或sprintf_s
,則使用它。
char output[SUFFICIENTLY_LARGE_VALUE];
sprintf (output, "\fDeposited $%s\nAdd $%s more", disp_money, temp);
在sprintf的字符串%s
表示其中一個字符串參數將被插入的地方,第一%是第一個參數(disp_money)和第二%是第二個參數(溫度)。
你能舉個例子說明這會有什麼幫助嗎? – Adam
該文檔是一個示例。如果您正在尋找內置操作員支持,則無法找到它。 –