FIXED: Привет, я получаю эту странную ошибку сегментации на C, когда я пытаюсь подсчитать слова в тексте. Может ли кто-нибудь объяснить мне, почему и решение для seg-fault?Seg Fault When Looping in Strings C Pointer
Вот мой исходный код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
int isword(char *str) {
return (isalnum(*(str + 1))) ? 1 : 0;
}
int main() {
char **text, c;
int n, i, j;
//reading from stdin & allocating it dynamically
scanf("%d\n", &n);
text = malloc(n * sizeof(char *));
for(i = 0; i < n; i++) {
text[i] = malloc(200 * sizeof(char));
}
for(i = 0; i < n; i++) {
for(j = 0; ; j++) {
scanf("%c", &c);
if(c == '\n') {
break;
}
text[i][j] = c;
}
}
// Counting words
int word_counter = 0;
char *delimitor = " ";
char *pos;
for(i = 0; i < n; i++) {
pos = text[i];
do {
if(isspace(*pos) && isword(pos)) {
word_counter++;
}
pos ? pos++ : pos;
// pos++;
} while(*pos != '\0');
}
printf("Number of words: %d\n", word_counter);
return 0;
}
Пример ввода:
4
Adam baked a pie.
Mary went to a movie
Mark goes like ?? him
Gina is, hot
Пожалуйста, обратите внимание на чрезмерное использование пространства во втором предложении.
У меня также есть другой вопрос о моем чтении от stdin
. Есть ли лучший способ достичь этого? Я имею в виду, что я пытался сделать это с помощью fgets
, но мне не удалось, и я знаю, что я не должен использовать gets
(черт, даже GCC дает ему предупреждение, если вы используете get).
Другой вопрос: Почему он не печатает ожидаемое количество слов? И он печатает 12 вместо 14?
Какая линия вызывает SEG-вины? (Подсказка: запустите свой код в отладчике ...) –
сделать, пока вызывает seg-fault. Я отредактирую вопрос –
Еще один намек: если 'pos' является указателем на символ, как вы проверяете, является ли символ, на который он указывает,' '\ 0''? – godel9