![](/img/trans.png)
[英]why strncpy is able to copy source string even if destination buffer is zero?
[英]Copy string source into destination, and then append a character in C
將字符串復制到目標位置,在目標位置末尾添加字符C,然后將終止目標位置為null。 我們可以假設sizeof(destination)> = strlen(source)+ 2
void strcpyALT(char* dest, char* source, char c) {
char* dst = dest;
char* src = source;
while(*src) {
*(dst++) = *(src++);
}
dst = dst + 1;
*dst = c;
dst = dst + 1;
*dst = '\0';
}
我是C語言的新手,但有兩個問題,在假設的前提下,這段代碼似乎正確嗎? 我為自己設置了一些本地測試,但只想確保我沒有犯任何我沒有捕捉到的明顯錯誤。 另外,有沒有更干凈的方法來寫入最后4行?
給定假設,此代碼似乎正確嗎?
沒有。
while(*src) {
*(dst++) = *(src++);
}
dst = dst + 1;
*dst = c;
在這里,當您退出循環時, dst
將已經指向c
應該被寫入的位置(附加到字符串)。 當你做dst = dst + 1;
,則保持該位置不變,然后將c
寫入所需位置的下一個位置。
因此,丟棄dst = dst + 1;
(拉伸)如有疑問,請進行更多測試。
另外,有沒有更干凈的方法來寫入最后4行?
還有其他方法(現在要寫3行),但是我想這很干凈。
簡而言之:刪除此行,緊接循環后的一行,“ dst = dst + 1”。 休息吧。
有沒有更干凈的方法來寫最后4行?
*dest++ = c;
*dest = '\0'; //reduced to 2 lines.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.