所以,我在C中编写了以下函数:
void splitNameAndDate(char *p, char *n, char *d) {
int d_index = 0, n_index = 0;
for (int i = 0; i < strlen(p); i++) {
if(p[i] >= '0' && p[i] <= '9') {
d[date_index++] = p[i];
} else {
n[name_index++] = p[i];
}
}
}
此函数获取一个如下所示的数组(代表一个人):adam1502
(名称和日期)并将其拆分为两个数组 - 名称和日期。我像这样初始化数组:
char date[5],name[50],person[50];
例如,如果p
数组包含Michelle1001
,则n
数组由于某种原因而具有Michelle\023
。无法理解为什么它会使\023
结束。但其他测试工作正常。
P.S我使用Clion的调试器来查看数组包含的内容。
**编辑 - 我可以在最后使用以下代码吗?
date[date_index] = '\0';
name[name_index] = '\0';
答案 0 :(得分:2)
看起来你被不确定的价值所击中。
本地范围定义,如
char date[5],name[50],person[50];
保持数组的所有成员未初始化,因此值是不确定的。
稍后,您只将相关值复制到某个索引(减去空终止符),其余值仍然保留为不确定。所以,你可以在那里看到一些仲裁价值。