簡體   English   中英

C連接字符串變量字符串

[英]C concatenate string variable string

我嘗試以下面的形式連接“string”,變量,“string”;

#include <stdio.h>

int main() {
        char *name = "Lannister";

        char write_letter[50] = "Here you are Mrs. ", name, " Welcome!\r\n"
                             "Getting Started\r\n"
                             "Interviews\r\n"
                             "Take-home Projects\r\n";
}

有誰知道怎么做?

我看到了sprintf的一個例子(write_letter,“你是Mrs.%s歡迎!”,名字); 但是當我使用大文本時非常困難。

您只能對編譯時可評估的常量表達式使用"..." "..."表示法。 由於name你的運行時構造。

你需要使用strcatsnprintf等。

如果在編譯時已經確定了名稱,並且如果在運行時沒有必要更改名稱,那么無論如何都要選擇最簡單的替代方案,即 -

#define NAME "Lannister"

char write_letter[] = "Here you are Mrs. " NAME " Welcome!\r\n"
                      "Getting Started\r\n"
                      "Interviews\r\n"
                      "Take-home Projects\r\n";

編譯最高警告級別設置。 執行此操作時,您將收到類似於“ charmer數組的初始化字符串太長 ”的警告(這是GCC生成的警告)。 50對於這個數組來說太小了,因此我允許編譯器決定數組大小(即'write_letter []')。

如果需要在運行時更改字符串,請使用strcat() -

char write_letter[150] = "Here you are Mrs. ";
char *name = "Lannister";
char *write_letter_post = " Welcome!\r\n"
                          "Getting Started\r\n"
                          "Interviews\r\n"
                          "Take-home Projects\r\n";

strcat(write_letter, name);
strcat(write_letter, write_letter_post);
/*Use strncat() to prevent buffer overflow possibilities.*/

或者,sprintf() -

char *_write_letter = "Here you are Mrs. %s Welcome!\r\n"
                      "Getting Started\r\n"
                      "Interviews\r\n"
                      "Take-home Projects\r\n";
char *name = "Lannister";
char write_letter[150];

sprintf(write_letter, _write_letter, name);
/*Use snprintf() to prevent buffer overflow possibilities.*/

鑒於所涉及的所有字符串都是直接相互寫入並且它們是純粹的常量字符串文字 ,預處理器能夠為您執行字符串連接。 也就是說, " "包圍的東西,而不是變量。 例如, "hello" "world"將被預處理器改為"helloworld"

這不適用於變量。 如果您有字符數組,則需要將它們與運行時函數(如strcat連接起來。

作為sprintf的替代方法(使用snprintf(NULL, 0, ...)來知道為結果分配多少內存),可以使用strcat 但同樣,你負責分配足夠的內存來包含最后的字符串!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM