我在一些網站上閱讀了strcat() C 庫函式的檔案。
我還在這里閱讀了:Does strcat() overwrite or move the null?
但是,還有一個問題——strcat() 函式能否用于覆寫目標字串中的字符(假設目標字串有足夠的空間容納源字串,所以不會出現錯誤)?
我運行了以下代碼,發現它無法覆寫 dest 字串的字符...
char dest[20] = "Hello World";
char src[] = "char";
strcat(dest 1, src);
printf("dest: %s", dest);
假設目標是擁有一個包含以下內容的目標字串:“Hchar World!”
(我知道 strcat() 還將 NULL 字符 ('\0') 復制到 dest 字串,因此如果呼叫 printf() 函式,它應該列印 Hchar,因為我錯誤地認為會發生......)。
這是與 strcat() 相關的可能任務嗎?如果不是, strcpy() 是問題的答案嗎?
例如,如果字串中間有賦值'\0'(NULL字符),那么strcat()會不會總是處理它遇到的第一個'\0'(NULL字符)?我的意思是,如果我有:
char str[] = "Hello";
str[2]= 0;
strcat(str, "ab");
我只是想確定并澄清誤解。我會很高興閱讀解釋。
uj5u.com熱心網友回復:
正如評論中所指出的,該strcat函式將始終(嘗試)將作為其第二個引數(傳統上稱為src)給出的字串附加到作為其第一個 ( dest)給出的字串;如果任一字串不是以空字符結尾或目標緩沖區不夠大,它將產生未定義的行為。
該cppreference網站提供了比你鏈接的網站更好的檔案(適用于C和C )。從該網站的strcat頁面:
(1) ... 該字符
src[0]替換dest.末尾的空終止符。生成的位元組字串以空字符結尾。
和:
筆記
因為每次呼叫都
strcat需要尋找到結尾dest,所以使用strcat.
因此,在您顯示的代碼中,呼叫strcat(dest 1, src);與呼叫的效果相同strcat(dest, src);。但是,呼叫strcpy(dest 1, src);將產生您想要的結果(列印Hchar)。
uj5u.com熱心網友回復:
strcat會寫src串在最后的dst。如果你想dst用 strcat覆寫,你首先需要dst在你想覆寫它的地方做“結束”。
看看這個代碼示例:
#include <stdio.h>
#include <string.h>
int main()
{
char dst[20] = "Hello world";
char src[] = "char";
dst[1] = '\0';
strcat(dst, src);
printf("%s\n", dst);
return (0);
}
但是,這不是 的目的strcat,正如評論中所說,在strcpy這里使用更合適。
#include <stdio.h>
#include <string.h>
int main()
{
char dst[20] = "Hello world";
char src[] = "char";
strcpy(dst 1, src);
printf("%s\n", dst);
return (0);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/388748.html
上一篇:按字符位置串列拆分字串
下一篇:保持字串參考集合的最有效方法
