char数组最后包含垃圾

时间:2018-06-08 16:30:11

标签: c arrays pointers

所以,我在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';

1 个答案:

答案 0 :(得分:2)

看起来你被不确定的价值所击中。

本地范围定义,如

  char date[5],name[50],person[50];

保持数组的所有成员未初始化,因此值是不确定的。

稍后,您只将相关值复制到某个索引(减去空终止符),其余值仍然保留为不确定。所以,你可以在那里看到一些仲裁价值。