使用strcmp()和文件中的字符串

时间:2013-10-23 20:36:49

标签: c strcmp

我必须创建一个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);
}

1 个答案:

答案 0 :(得分:0)

您不能将strcpyc一起使用,因为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定义为常量。