У меня возникли некоторые проблемы при попытке фильтровать слова из файла и записать их в новый файл. То, что я пытаюсь сделать, это написать только слова, которые появляются после «&» до первой цифры.Записать системный вызов C, заполнить филе мусором
Например (Это содержимое файла Читаю с):
& some 12 test1 test2
$ thisword 4 no no no no
Для выше входа, я хочу, чтобы записать в новый файл слова только некоторые и thisword ,
Мой код работает, но вместо того, чтобы печатать только эти слова, он также печатает мусор.
int main (argc,argv)
int argc;
char *argv[];
{
int inpfd,outpfd,n;
int i=0;
char tmp[2],buff[BUFFSIZE]; //This is our buffer
//Open the output file of ispell
inpfd = open("outputfile.txt",O_RDONLY);
//Check if open command failed
if(inpfd == -1) {
printf("Failed to open file");
exit(1);
}
//Here we are reading from output file
read(inpfd,buff,999);
buff[999] = '\0';
close(inpfd);
outpfd = open("w.txt",O_WRONLY);
if(outpfd == -1) {
printf("Cannot open file for writing!");
exit(1);
}
//Looping over the Buffer
for (i=0; i <BUFFSIZE; i++) {
printf("This is the char : %c \n",buff[i]);
if(buff[i] == '&') {
i++;
while(!(isdigit(buff[i]))) { //Write into output file
//As long as we didnt reach
tmp[0] = buff[i]; // To the digit
write(outpfd,tmp,1);
i++;
}
write(outpfd,"\n",1); //Moving to the next line
}
}
close(outpfd);
return 0;
}
Этот вывод файла после написания (я наклеивать только небольшую часть мусора):
some
thisword
^@^@^@<FD>^?^@^@<80><B2>-<AD><FD>^?^@^@<B0>
<B0>be^@^@^@^@[^X^?^@^@^@<B4>-<AD><FD>^?^@^@s^X<F0>[^X^?^@^@^@<FF>^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@/
Я понятия не имею, что это за фигня, может кто-то пожалуйста помочь?
Ваш синтаксис для основной декларации составляет более 30 лет. (помещая типы аргументов между именем функции и телом). Мы настоятельно рекомендуем писать в современном C. – abelenky
. Ваш входной файл ('inpfd') называется' outputfile.txt'? И открыл ReadOnly? Разве вы не думаете, что это немного тупо? – abelenky
У вас нет морального права понять, почему ваша программа терпит неудачу, если вы не пытаетесь проверить сообщение об ошибке, которое пытаются дать ваши системные вызовы. –