C 计算文件中的单词数?
我有一个用C语言编写的程序,它应该计算单词“the”在作为参数给出的文本文件中出现的次数。但是该程序不断给出一个分段错误,我对如何解决这个问题没有更多的想法。任何帮助都将不胜感激。谢谢 代码如下:C 计算文件中的单词数?,c,file,C,File,我有一个用C语言编写的程序,它应该计算单词“the”在作为参数给出的文本文件中出现的次数。但是该程序不断给出一个分段错误,我对如何解决这个问题没有更多的想法。任何帮助都将不胜感激。谢谢 代码如下: #include <stdio.h> #include <string.h> void main(int argc, char *argv[]) { int h,i; FILE *fp; char* mess; for(i=1; i < argc; i
#include <stdio.h>
#include <string.h>
void main(int argc, char *argv[])
{
int h,i;
FILE *fp;
char* mess;
for(i=1; i < argc; i++)
{
h=0;
fp=fopen(argv[i],"r");
while (!feof(fp))
{
fscanf(fp,"%s",mess);
if (strcmp(mess,"the")==0)
h++;
}
printf("The file %s contains the word \"the\" %d times.",argv[i],h);
h=0;
fclose(fp);
}
}
#包括
#包括
void main(int argc,char*argv[])
{
int h,i;
文件*fp;
char*mess;
对于(i=1;i
混乱是未初始化的。你需要为正在阅读的单词分配一些空间
s匹配一系列
非空白字符;下一个
指针必须是指向char的指针,并且
阵列必须足够大,以便
接受所有序列和
终止NUL字符。输入
字符串在空白处或在
最大字段宽度,以发生的为准
首先
因此,您还希望使用字段宽度将读取的内容限制为缓冲区的大小。这需要小心处理,因为缓冲区大小后的位可能是“the”(例如,“breathe”,如果你读4个字符的单词,会给你“brea”和“the”,并且是假阳性)
混乱是未初始化的。你需要为正在阅读的单词分配一些空间
s匹配一系列
非空白字符;下一个
指针必须是指向char的指针,并且
阵列必须足够大,以便
接受所有序列和
终止NUL字符。输入
字符串在空白处或在
最大字段宽度,以发生的为准
首先
因此,您还希望使用字段宽度将读取的内容限制为缓冲区的大小。这需要小心处理,因为缓冲区大小后的位可能只是“the”(例如,“breathe”,如果您读取4个字符的单词,将给您“brea”和“the”以及假阳性)
fscanf(fp,“%s”,mess)代码>不会分配内存 fscanf(fp,“%s”,mess)代码>不会分配内存 char*mess
是一个统一的指针。换句话说:它是一个变量,其值是内存中的随机地址。在您对fscanf
的调用中,将尝试在此地址写入内容,您的程序将崩溃
要么使mess
成为一个固定大小的数组,要么使它指向一个使用malloc
动态分配的有效内存块(这里可能没有用)。在这两种情况下,您可能需要确保读取的字符数不能超过大小
字符,否则将导致全新的分段错误。字符*混乱
是一个统一的指针。换句话说:它是一个变量,其值是内存中的随机地址。在您对fscanf
的调用中,将尝试在此地址写入内容,您的程序将崩溃
要么使
mess
成为一个固定大小的数组,要么使它指向一个使用malloc
动态分配的有效内存块(这里可能没有用)。在这两种情况下,您可能需要确保读取的字符数不能超过大小
,否则将导致一个全新的分段错误。您需要为sscanf
提供的缓冲区mess
分配内存:
char-mess[256]代码>
当前,mess
未初始化(null)sscanf
尝试写入时会出错 您需要为提供给sscanf
的缓冲区mess
分配内存:
while (!feof(fp))
{
fscanf(fp,"%s",mess);
if (strcmp(mess,"the")==0)
h++;
}
char-mess[256]代码>
当前,mess
未初始化(null)sscanf
尝试写入时会出错
while (!feof(fp))
{
fscanf(fp,"%s",mess);
if (strcmp(mess,"the")==0)
h++;
}
您正在从文件中读取字符串,并将其放入mess
,这是指向字符的普通指针。您需要字符数组:
char mess[1000];
您正在从文件中读取字符串,并将其放入mess
,这是指向字符的普通指针。您需要字符数组:
char mess[1000];
据我从代码中了解,在使用fscanf填充mess
指针之前,您尚未初始化该指针:
fscanf(fp,"%s",mess);
据我从代码中了解,在使用fscanf填充mess
指针之前,您尚未初始化该指针:
fscanf(fp,"%s",mess);
使用mess=malloc(sizeof(char)*SOME_NUMBER)
或简单地将mess声明为字符数组,即char-mess[1024],为mess分配内存 使用mess=malloc(sizeof(char)*SOME_NUMBER)
或简单地将mess声明为字符数组,即char-mess[1024] 如果为其分配了一些内存,“指向字符的普通指针”就可以了。如果为其分配了一些内存,“指向字符的普通指针”就可以了。我可以补充一点,C对于这种工作来说是多余的吗?“main=interactive$show.length.filter(=”the”).words”就足够了。@IGCA,这大概是一个赋值。我可以补充一下,对于这种工作来说,C是一个多余的任务吗?“main=interactive$show.length.filter(=”the”).words“足够了。@IGCA,这可能是一个赋值。