c - C语言中如何将带有终止符的字符串复制到另一个字符串中?

标签 c string memory

我有这样的字符串

    char year_cp[5], mon_cp[3], date_cp[3];

    char *src;
    src = "2017-05-30";

我想将年、月、日期存储在单独的缓冲区中。我也尝试了 strncpy() 和 sprintf() 。像这样

    strncpy(mon_cp,&src[4],2); //strncpy(mon_cp, src+4, 3);
    mon_cp[2] = '\0';
    printf("mon-cp %s\n",mon_cp);
    strncpy(year_cp,&src[0],4); //strncpy(year_cp, src+0, 5);
    year_cp[4] = '\0';
    printf("year-cp %s\n",year_cp);

即使我将 src 字符串传递为

    src = "20170530";

它仅复制 mon_cp,而不是将年份复制到year_cp

我遇到了段错误。

请告诉我实现这一目标的最佳方法

最佳答案

您可能应该使用sscanf(),如下所示:

char * src = "2017-05-30";
unsigned year, month, day;
if(sscanf(src, "%u-%u-%u", &year, &month, &day) < 3) {
    /* ERROR */
}

如果由于某种原因您需要将组件作为字符串,仅使用 %s 对您不起作用:您需要使用 snprintf() 调用转换回来或类似的。

关于c - C语言中如何将带有终止符的字符串复制到另一个字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44249243/

相关文章:

java - 将 null 分配给字符串文字和 GC

c - 字符串操作后尝试释放内存时出错

memory - 当内核使用过度使用内存时,是否需要在分配内存后检查 NULL

c - 我怎样才能在 Xcode 执行中进入 "over-memory"

c - C中将字符串拆分为双指针

c - 如何将具体的二维数组连接到先前定义的指向头文件中指针的指针?

c# - 如何从 sourcecode.c 创建 DLL 库,然后在 C# 中使用它

java - 使用正则表达式搜索文本中的多个单词 (Java)

c - 文件末尾后有哪些字符?

java - new string(byte[]) 在多线程应用程序中太慢