【问题标题】:C using open()read()write() to access text modify it and store in a new fileC 使用 open()read()write() 访问文本修改它并存储在一个新文件中
【发布时间】:2017-03-19 01:52:36
【问题描述】:

我的程序应该从命令行中给出的文件中获取文本,将其更改为大写并将其存储在另一个文件中。 它可以工作,除了输出文件在转换后的文本后有一大堆垃圾。谢谢 编辑:我将读取更改为检查 0 字节,并使用 ret_in 来写入每件睡衣,但它仍然会提取两个或三个垃圾值。肯定会读到垃圾,因为当我在转换之前输出缓冲区时它就在那里。

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

#define BUF_SIZE 500

int main(int argc, char* argv[]){
  char buffer[BUF_SIZE];
  int ret_in;
  char inputf[100],outputf[100],txt[4],up[3];
  // Takes input and adjusts it to the correct file type. 
  strcpy(inputf,argv[1]);
  strcpy(outputf,argv[1]);
  strcat(outputf,".up");
  printf("%s\n",outputf);
  strcat(inputf,".txt");
  printf("%s\n",inputf);
  int output, input,wrt;
  int total;


    //opens input file
input=open(inputf, O_RDONLY);
if (input == -1) {
    printf("Failed to open file\n");
    exit(1);
}
ret_in = read(input,buffer,BUF_SIZE);
total = ret_in;
// output to console
while (ret_in!= 0) {
  //  printf("%s\n", buffer);
    ret_in = read(input,buffer,BUF_SIZE);
    total += ret_in;
}
//ret_in= read(input,&buffer,BUF_SIZE);
puts(buffer);   
close(input); 
int i = 0; 
while(buffer[i]) {
      buffer[i] = toupper(buffer[i]);
      i++;
   }
// output buffer in console   
puts(buffer);   
//output filename in console
printf("%s\n",outputf);
  // Opens or creates output file with permissions.
 output = open(outputf, O_CREAT| S_IRUSR | O_RDWR);
  if (output == -1) {
      printf("Failed to open or create the file\n");
    exit(1);
}
// write to output file
wrt = write(output, buffer,total);  

close(output);


  return 0;
}

【问题讨论】:

    标签: c


    【解决方案1】:

    因为您从文件中读取ret_in 字节,但您将BUF_SIZE 写入文件,所以您应该将ret_in 字节写入文件。您不应该每次都从文件中读取BUF_SIZE 字节,这取决于,对吧?

    write(output, buffer,BUF_SIZE);//wrong
    write(output, buffer,ret_in);  //right
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2023-03-12
      • 2020-06-26
      • 1970-01-01
      相关资源
      最近更新 更多