c - strncpy 追加 1 个额外(奇怪或随机)字符

标签 c substring concatenation strncpy

我写了一个简单的c程序,它只取一个单词的前两个字符,并取第二个单词的后三个字符。我使用 strncpy 仅将 name1 的前 2 个字母复制到 name,并与 name2 的最后三个字符连接。

但是,当我运行它时。输出会有点像

Ediacy //correct

acy  //wrong

Ed?
acy  //wrong

Edk
   acy //wrong

Edv
   acy //wrong

// code sample
#include <stdio.h>
#include <string.h>

int main(void)
{
    char name[100];

    char name1[] = "Edison";
    char *name2 = "Tracy";

    strncpy(name, name1, 2); // instead of get Ed, it tried to append one extra char behind it.
    strcat(name, name2+2);

    printf("%s\n", name);

    return 0; 
}

如果有人帮助我弄清楚为什么会这样以及我该如何纠正它,我将非常感激?

最佳答案

strncpy 如果大小太小,则不会添加 null 终止符。

试试这个:

strncpy(name, name1, 2);
name[2] = '\0';

关于c - strncpy 追加 1 个额外(奇怪或随机)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458333/

相关文章:

java - 在特殊字符之间查找文本并替换字符串

azure - 如何从 Azure 数据工厂中具有动态长度的字符串中删除最后三个字符?

matlab - 在 matlab 中连接元胞数组的向量

c - C语言如何初始化一个空的Buffer

Eclipse 中的 C 代码返回对符号 cvSaveImage 的 undefined reference

android - 映射共享库时出错

c - 如何通过scanf传值给函数

C# string.Substring() 或 string.Remove()

sql-server - 如何将 "Implode"(反规范化/连接)多个列合并为单个列?

java - 为什么 'concat'不改变字符串?