我接受了评论并重写了代码。但它仍然无法奏效。 我打开一个包含几个句子的文本文件,将小写字母更改为大写字母,然后尝试在另一个文件中输入它们。 我不太清楚如何使用read()的第三个参数。 我该如何更正代码?
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
int main()
{
int fp,ftp,i,nread;
char str[300];
if(fp=open("text_in",O_RDONLY) < 0)
{
perror("open: ");
exit(1);
}
if(ftp=open("text_w", O_WRONLY |O_CREAT , 0644) < 0)
{
perror("open: ");
exit(1);
}
nread=read(fp,str,300);
for(i=0; i<=nread; i++)
{
if((str[i] >= 'a') && (str[i] <= 'z'))
{
str[i] -= ('a'-'A');
}
}
write(ftp,str,nread);
close(fp);
}
答案 0 :(得分:0)
以下提议的代码:
toupper()
现在,建议的代码:
#include <stdio.h> // perror()
#include <stdlib.h> // exit()
#include <fcntl.h> // open(), O_RDONLY, O_WRONLY, O_CREAT
#include <unistd.h> // read(), write(), close()
#include <ctype.h> // toupper()
#define BUF_LENGTH 300
int main( void )
{
int fdi;
int fdo;
char buffer[ BUF_LENGTH ];
if( (fdi=open("text_in",O_RDONLY)) < 0)
{
perror("open: ");
exit(1);
}
if( (fdo=open("text_w", O_WRONLY |O_CREAT , 0644)) < 0)
{
perror("open: ");
close( fdi ); // cleanup
exit(1);
}
ssize_t nread = read( fdi, buffer, BUF_LENGTH );
if( nread <= 0 )
{ // then EOF or read error
perror( "read failed" );
close( fdi );
close( fdo );
exit( 1 );
}
for( ssize_t i=0; i<=nread; i++ )
{
buffer[i] = (char)toupper( buffer[i] );
}
ssize_t nwritten = write( fdo, buffer, (size_t)nread );
if( nwritten != nread )
{
perror( "write all, bytes failed" );
}
close(fdi);
close(fdo);
}