【发布时间】:2017-05-29 19:21:36
【问题描述】:
我有这样的字符串
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中
我遇到了分段错误。
请告诉我实现这一目标的最佳方法
【问题讨论】:
-
您必须确保在 C 中的字符串末尾始终有一个 NUL 字符“\0”。C 中的所有 str* 函数都存在无法给出有用结果的情况。
-
在
strncpy(mon_cp,&src[4],2),第一个月字符的索引不是src[4],而是src[5],基于之前的定义src = "2017-05-30";。但是确实与后面的定义src = "20170530";一致。所以投票结束,因为问题需要 MCVE。 -
发布的代码看起来不错。问题出在代码的其他部分。请发送minimal reproducible example - 这将使问题可以回答或完全消除问题。
-
strtok 就是你要找的东西
-
如果我使用 char 数组而不是 char 指针会有什么不同吗? @大卫施瓦茨