[英]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.