C 第二次使用fgets时出现分段错误
这是我的完整代码:C 第二次使用fgets时出现分段错误,c,string,segmentation-fault,fgets,C,String,Segmentation Fault,Fgets,这是我的完整代码: #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <regex.h> #define SEN_LIMITERS ".!?" int main() { char inputexp[256]; char inputString[256]; const char *Limits = SEN
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <regex.h>
#define SEN_LIMITERS ".!?"
int main()
{
char inputexp[256];
char inputString[256];
const char *Limits = SEN_LIMITERS;
char *sentence;
regex_t expression;
char **cont = NULL;
int Words = 0, index;
printf("Please enter the string to analyse: \n");
if(fgets(inputString,255,stdin) != NULL);
printf("Please enter the regular expression :");
if(fgets(inputexp,255,stdin) != NULL);
inputexp[strlen(inputexp)-1] = '\0';
if (regcomp(&expression,inputexp,REG_EXTENDED) != 0) {
printf("ERROR: Something wrong in the regular expression\n");
exit(EXIT_FAILURE);
}
sentence = strtok_r(inputString,Limits,cont);
while(sentence != NULL){
printf("%s\n",sentence);
if (regexec(&expression,sentence,0,NULL,0) == 0) {
printf("Yes ");
} else {
printf("No ");
}
for (index = 0;sentence[index] != '\0';index++)
{
if (sentence[index] == ' ')
Words++;
}
printf("%d words\n",Words);
Words = 0;
sentence = strtok_r(inputString,Limits,cont);
}
return(EXIT_SUCCESS);
}
我真的不知道为什么会发生这样的事情,因为第一批fgets似乎已经通过了。我不确定我是否应该是malloc,原因与上述相同。您程序中的崩溃来自以下几行:
sentence = strtok_r(inputString,Limits,cont);
要超越它,您必须将cont
声明为char*
,并将其地址传递给strtok\r
:
sentence = strtok_r(inputString, Limits, &cont);
为了避免无休止的循环,在strtok\u t
的while
语句中,您必须按照strtok\r
手册页中指定的方式将inputString
更改为NULL
:
在第一次调用strtok_r()时,str应该指向要调用的字符串
已解析,并忽略saveptr的值。在随后的调用中,str
应为NULL,并且saveptr应为
自上次通话后保持不变
因此,对strtok_r的第二个调用应该如下所示:
sentence = strtok_r(NULL, Limits, &cont);
另一个注意事项是关于处理fgets错误情况,这不能仅仅用分号来完成代码>,您可以通过类似的方式执行此操作:
if (fgets(inputString, 255, stdin) != NULL) {
fprintf(stderr, "Error while reading input text\n.");
exit(EXIT_FAILURE);
}
这个声明应该做什么<代码>如果(fgets(inputexp,255,stdin)!=NULL)代码>你在某处撞车了。您可能需要调试它。
if (fgets(inputString, 255, stdin) != NULL) {
fprintf(stderr, "Error while reading input text\n.");
exit(EXIT_FAILURE);
}