繁体   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