セグメンテーション違反を生成する私の小さなCスニペットは次のとおりです。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int checkTiime(char time[]);
int main(int argc, char** argv) {
char time1[6];
char time2[6];
printf("Tempo 1 [hh:mm]: ");
fgets(time1, sizeof time1, stdin);
printf("Tempo 2 [hh:mm]: ");
fgets(time2, sizeof time2, stdin);
printf("Checktime: %d", checkTime(time1));
return (EXIT_SUCCESS);
}
int checkTime(char time[]){
long hours = 0;
long minutes = 0;
if(time[2] == ':') {
if(isdigit(time[3]) && isdigit(time[4]) && isdigit(time[0]) && isdigit(time[1])) {
hours = strtol(time[0], NULL, 10) + strtol(time[1], NULL, 10);
minutes = strtol(time[3], NULL, 10) + strtol(time[4], NULL, 10);
if((hours >= 0 && hours <= 23) && (minutes >= 0 && minutes <= 59)){
return 0;
} else {
return 1;
}
} else {
return 1;
}
} else {
return 1;
}
}
誰かが私を助けることができますか?なぜ問題が発生しているのか、本当にわかりません。
また、たとえば「12:34」と入力すると、2番目の入力を入力するように求められますが、「12:34」と入力すると、バックスペースを使用して「34」を削除し、もう一度「34」と入力すると、 2番目のprintfですが、2番目の入力を入力できず、プログラムが終了します。
個人的なコメント:
gets()
文字を数えないので、関数を使って文字列を入力する方が良いことに気づきました\n
。