[英]Seg Fault When Looping in Strings C Pointer
修正:嘿,當我嘗試計算文本中的單詞時,我在C中遇到了這種奇怪的分段錯誤。 誰能解釋我的原因以及段錯誤的解決方案?
這是我的源代碼:
#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
(地獄,即使您使用gets,GCC也會發出警告)。
另一個問題:為什么不打印預期的單詞數? 它打印12而不是14?
pos ? pos++ : pos;
// pos++;
} while(pos != '\0');
至
*pos ? pos++ : pos;
// pos++;
} while(*pos != '\0');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.