我遇到细分错误

时间:2019-09-20 12:45:02

标签: c

由于某种原因,我遇到了分段错误,我编写了该程序来计算两个日期之间的日期,并希望将“ dd-mm-yyyy”表示为字符串,并将“ dd2-mm2-yyyy2”表示为还应该用字符串表示,我以为可以解决这个问题,但是我遇到了分段错误,有人可以帮我吗?我在做什么错了?

1 个答案:

答案 0 :(得分:1)

这似乎不正确。 argv [1]是您的“ day”字符串,长度为1或2个字符,并且您在索引字符3和4。

char monstr[3];
monstr[0]= argv [1][3];
monstr[1]=argv [1][4];
monstr[2] = '\0';

这可能应该是:

char monstr[3];
monstr[0]= argv [2][0];
monstr[1]=argv [2][1];
monstr[2] = '\0';

与其他一些字符串相同。

但是,这就是说,我基于您似乎在解析输入的方式。如果您希望输入的是dd-mm-yyyy,那么您输入的内容就不正确。相反,您应该执行以下操作:

int dd, mm, yyyy;
sscanf(argv[1], "%d-%d-%d", &dd, &mm, &yyyy);

与其他字符串相同。在那种情况下,我纠正的前一件事不需要纠正。

作为一般建议:发生分段错误的原因是因为您正在访问无法访问的内存。一个常见的原因是超出数组范围或使用了无效的指针。在您的情况下,这似乎是这两者之一,并且来自argv的误用。