[英]string.h functions - strncpy and strncat strange behaviour
我正在測試一些string.h
函數,並在使用函數strncpy
和strncat
時發現了一個奇怪的行為。
#include <stdio.h>
#include <string.h>
int main()
{
char name1[30], name2[30], name3[30], name4[30], name5[30];
char *res;
printf("First name: ");
scanf("%[^\n]", name1);
setbuf(stdin, NULL);
printf("\nSecond name: ");
scanf("%[^\n]", name2);
strcpy(name3, name2);
printf("\nname3: %s", name3);
strncpy(name4, name3, 5);
printf("\nname4: %s", name4);
//printf("\nSize of first name: %zu", strlen(nome1)); //zu para size_t
//printf("\nTamanho do segundo nome: %d", (int) strlen(nome2));
strncpy(name5, name1, 3);
printf("\nname1: %s", name1);
printf("\nname2: %s", name2);
printf("\nname3: %s", name3);
printf("\nname4: %s", name4);
printf("\nname5: %s", name5);
strcat(name1, name2);
printf("\nname1: %s", name1);
strncat(name4, name5, 3);
printf("\nname4: %s", name4);
return 0;
}
當我運行代碼時,我得到以下輸出:
First name: apple
Second name: elefant
name3: elefant
name4: elefa
name1: apple
name2: elefant
name3: elefant
name4: elefa
name5: app|�
name1: appleelefant
name4: elefaapp
為什么name5
得到app|
而不是僅僅得到app
? 此外,有時我會得到姓氏name4
,它是name4
與name5
的串聯,作為elefaapp|
。 任何人都可以解釋這種奇怪的行為嗎?
我已經搜索並閱讀了函數文檔,但我對此一無所知。
從文檔:
https://www.cplusplus.com/reference/cstring/strncpy/
如果 source 長於 num,則不會在目標末尾隱式附加空字符。 因此,在這種情況下,destination 不應被視為以空字符結尾的 C 字符串(這樣讀取它會溢出)。
一般情況下,使用strncpy
時需要手動添加一個'\\0'
來終止字符串
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.