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

最佳答案

这似乎不正确。 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的滥用。

关于c - 我遇到了段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58028661/

10-11 18:36