gpt4 book ai didi

c - 在字符串 C 指针中循环时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:22:34 25 4
gpt4 key购买 nike

已修复:嘿,当我尝试计算文本中的单词数时,我在 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使用获取)。

另一个问题:为什么它没有打印预期的字数?它打印 12 而不是 14?

最佳答案

    pos ? pos++ : pos;
// pos++;
} while(pos != '\0');

    *pos ? pos++ : pos;
// pos++;
} while(*pos != '\0');

关于c - 在字符串 C 指针中循环时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20456715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com