【问题标题】:C strncpy 2 char [duplicate]C strncpy 2 char [重复]
【发布时间】:2017-06-30 12:29:34
【问题描述】:

当我想从字符串中复制 2 个字符时,我无法创建 strncpy,但是当我想复制 3 个字符时,相同的代码正在工作。

在本例中,我需要 strncpy() 将 12 存储在 'to' 变量中:

void main(){
    const char* from = "12345678";
    char *to = (char*) malloc(3);
    strncpy(to, from, 2);

    printf("%s", to);
    free(to);
}

但是当我将strncpy(to, from, 3)malloc(4) 一起使用时,它可以正常工作。有什么解决方案可以完成这项工作吗?

【问题讨论】:

  • 当问题陈述很简单时,很难提供解决方案,“它不起作用”。请edit您的问题更完整地描述您预期会发生什么以及这与实际结果有何不同。请参阅 How to Ask 以获取有关什么是好的解释的提示。
  • 只需阅读文档:如果 source 长于 num,则不会在目标末尾隐式附加空字符。
  • 对未来的提示:不要使用strncpy,大多数时候它不会做你想做的事。
  • 这个bug确实是由于使用了危险的strncpy函数造成的。永远不要使用该功能,而是使用strcpymemcpy(以及适当的缓冲区大小检查)。

标签: c string malloc strncpy


【解决方案1】:

您忘记在目标字符串后面附加一个终止零。

char *to = (char*) malloc(3);
strncpy(to, from, 2);
to[2] = '\0';

【讨论】:

  • 它就是这样工作的,如果我使用 malloc (3) 并且需要 2 个字符不会在该数组的末尾添加 \n 吗?
  • 你不需要 C 中的演员表
猜你喜欢
  • 2013-01-25
  • 1970-01-01
  • 2021-05-29
  • 1970-01-01
  • 2014-02-25
  • 2013-01-25
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
相关资源
最近更新 更多