我必须创建一个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);
}
答案 0 :(得分:0)
您不能将strcpy
与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
定义为常量。