0

我必须逐字制作一个读取文件的C程序(我必须使用read()方法,我不允许使用C库和其他方法)。我想将文件中的单词与给定的单词进行比较。它基本上是在文件中搜索特定单词。

我的问题是,当我从文件中得到一个字时,例如。“bla”,我将它与同一个字符串进行比较,strcmp()并不表明它们是相同的。

我在下面粘贴了我的代码:

#include <stdlib.h>
#include <fcntl.h> //open,creat
#include <sys/types.h> //open
#include <sys/stat.h>
#include <errno.h> //perror, errno
#include <string.h>

int tananyag; 
int fogalom; 
int modositott;
char string_end = '\0';

int main(int argc,char** argv){

    tananyag = open("tananyag.txt",O_RDONLY); 
    fogalom = open("fogalom.txt",O_RDONLY); 
    modositott =open("modositott.txt",O_WRONLY|O_CREAT|O_TRUNC,S_IRUSR|S_IWUSR);

    if (tananyag < 0 || fogalom < 0 || modositott < 0){ perror("Error at opening the file\n");exit(1);}

    char c;
    int first = 1;
    char * str;
    str = (char*)malloc(80*sizeof(char));

    while (read(tananyag,&c,sizeof(c))){ 

            if(c != ' '){

            if(first){
                strcpy(str,&c);
                first = 0;
            }
            else{
                strcat(str,&c);
            }           
        }
        else
        {
            strcat(str,&string_end);

            printf("%s string length: %i \n",str,strlen(str));
            printf("%s string compared to bla string: %i \n",str, strcmp(str,"bla"));
            str = (char*)malloc(80*sizeof(char));
            first = 1;
        }
    }
    close(tananyag);
    close(fogalom);
    close(modositott);
}
4

1 回答 1

0

您不能使用strcpywith c,因为c它是单个字符,并且strcpy需要一个以空字符结尾的字符序列。我很惊讶这段代码甚至可以工作。您应该使用自己的方法写入字符串。例如,您可以保留一个索引i来存储您可以写入的下一个位置。

来自您的示例代码:

int i = 0;
while (read(tananyag,&c,sizeof(c))){ 
    if (c != ' ') {
        if (i < 79) {
            str[i] = c;
            i++;
        }
    }
    else
    {
        str[i] = '\0';
        printf("%s string length: %zu\n",str,strlen(str));
        printf("%s string compared to bla string: %d \n",str, strcmp(str,"bla"));
        i = 0;
    }
}

我添加了一项重要的检查以避免缓冲区溢出。您不能写入超出缓冲区的大小。使用此代码,大字中的任何多余字符都将被忽略。

注意:根据良好实践规则的要求,您应该将其80设为已定义的常量。

于 2013-10-23T20:40:36.447 回答