gpt4 book ai didi

c - 如何修复我自己的 tr 函数版本?

转载 作者:行者123 更新时间:2023-11-30 16:19:55 25 4
gpt4 key购买 nike

我正在开发tr函数的简化版本,结构如下:

mytr char1 char2 file1 file2。

目前我唯一想做的功能就是将 file1 中的 char1 替换为 file2 中的 char2。截至目前,我只能将 file1 的内容复制到 file2 中,但字符不会改变。我已经用西类牙语设置了函数名称,因此翻译如下: Abrir -> Open ;塞拉尔 -> 关闭;阅读 -> 阅读; daerror -> 显示应该如何实现的消息。

我知道我没有使用 Leer 函数,但我不能 100% 确定它是否正确,所以我只使用了 read 函数。

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>

int Abrir(char* nombre)
{
int result;
result=open(nombre,O_RDONLY);
return result;

}

int Cerrar(int fd){
if(close(fd)==-1){
fprintf(stderr,"error al cerrar el fichero\n");
exit(-1);
}
}

char Leer(int fd){
char car;
int nbytes;
nbytes=read(fd,&car,sizeof(char));
if(nbytes==-1){
fprintf(stderr,"Error en la lectura del fichero\n");
exit(-1);
}
if(nbytes==0){
return car;
// car='\0';
}
return car;
}

void daerror(){
printf("Utilizacion funcion: mitr caracter1 caracter2 fichero1 fichero2 <Cambia los caracteres de 1 en 2 y lo pone en el fichero2>\n");
}

void main(int argc, char* argv[]){
int arch2;
if(argc>0){
char* cadena1=argv[2];
char* cadena2=argv[3];
char* ficheroabrir=argv[4];
char* ficherocrear=argv[5];
int arch1=Abrir(ficheroabrir);
int arch2=Abrir(ficherocrear);
char c;
if(arch1==-1){
printf("no existe el fichero origen");
exit(-1);
}else if(arch2==-1){
printf("entra aqui");
int fd2 = open(ficherocrear,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
while(read(arch1,&c,sizeof(c)!=0)){

if(c!=*cadena1){
write(fd2,&c,sizeof(c));

}else{
write(fd2,&cadena2,sizeof(char));
}
}
Cerrar(fd2);
Cerrar(arch1);
exit(0);
}


}else{
daerror();
}

}

我的输出只是将file1的内容放入file2中,但没有将char1更改为char2

最佳答案

这似乎不能解释你的麻烦,但是这一行

while(read(arch1,&c,sizeof(c)!=0))

应该是

while(read(arch1,&c,sizeof(c))!=0)

甚至更好

while(read(arch1, &c, 1) == 1)

它也会捕获返回的-1

还要注意

write(fd2,&cadena2,sizeof(char));

应该是

write(fd2, cadena2, 1);

因为cadena2已经是一个指针。

<小时/>从“Utilizacion”输出来看,您对程序参数的使用不正确:

  • argv[1] 字符 1
  • argv[2] 字符 2
  • argv[3] 文件名 1
  • argv[4] 文件名 2

并且您必须检查 argc 以获得所需参数的确切数量。

关于c - 如何修复我自己的 tr 函数版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com