簡體   English   中英

C中的字符串連接?

[英]String concatenation in C?

我試圖理解 C 中字符串的行為,這讓我很困擾,因為我的以下兩個代碼片段導致了不同的輸出:(為了這個問題,讓我們假設用戶輸入 12)

int main(void)  
{
    char L_Red[2];
    char temp[] = "I";
    printf("Enter pin connected to red: ");
    scanf("%s", L_Red);
    strcat(temp,L_Red);
    printf("%s \n", temp);
    return 0;
}

這產生: 12 作為輸出(而不是 I12) 為什么?

int main(void)  
{
    char L_Red[2];
    printf("Enter pin connected to red: ");
    scanf("%s", L_Red);
    char temp[] = "I";
    strcat(temp,L_Red);
    printf("%s \n", temp);
    return 0;
}

這產生:I12I(而不是I12)為什么?

我已經閱讀了 C 中的字符串,根據我的理解,我既沒有分配 temp 任何固定大小並稍后更改它以獲得這些模糊的輸出,也沒有像他們不應該那樣使用字符串。 這里還有其他概念嗎?

數組temp是一個包含兩個字符的數組( 'I'和字符串終止符'\\0' )。 就是這樣。 嘗試向該數組追加更多字符將寫入越界並導致未定義行為

您需要確保目標數組temp有足夠的空間來容納其原始內容加上要附加的字符串(加上終止符)。


此外,如果您想為“字符串” L_Red輸入多個字符,您還需要增加其大小。

我還建議您在格式說明符中使用限制,這樣您就不能寫出越界:

char L_Red[3];  // Space for two characters, plus terminator
scanf("%2s", L_Red);  // Read at most two characters of input

您得到奇怪的答案是因為您的目標字符串(即 strcat 的第一個參數)不夠長,無法處理兩個字符串和一個空終止字符。 此外,L_Red 的長度太短,因為它也沒有足夠的空間容納空終止字符。

暫無
暫無

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

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