簡體   English   中英

string.h 函數 - strncpy 和 strncat 奇怪的行為

[英]string.h functions - strncpy and strncat strange behaviour

我正在測試一些string.h函數,並在使用函數strncpystrncat時發現了一個奇怪的行為。

#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 ,它是name4name5的串聯,作為elefaapp| 任何人都可以解釋這種奇怪的行為嗎?

我已經搜索並閱讀了函數文檔,但我對此一無所知。

從文檔:

https://www.cplusplus.com/reference/cstring/strncpy/

如果 source 長於 num,則不會在目標末尾隱式附加空字符。 因此,在這種情況下,destination 不應被視為以空字符結尾的 C 字符串(這樣讀取它會溢出)。

一般情況下,使用strncpy時需要手動添加一個'\\0'來終止字符串

暫無
暫無

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

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