我正在尝试在C中编写一个模拟C语言中wc
命令的程序。
这就是我所拥有的,但它总是返回0。
有人可以直接帮助我,因为我对C不是很熟悉。
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv)
{
int bytes = 0;
int words = 0;
int newLine = 0;
char buffer[1];
enum states { WHITESPACE, WORD };
int state = WHITESPACE;
if ( argc !=2 )
{
printf( "Help: %s filename", argv[0]);
}
else{
FILE *file = fopen( argv[1], "r");
if(file == 0){
printf("can not find :%s\n",argv[1]);
}
else{
char *thefile = argv[1];
char last = ' ';
while (read(thefile,buffer,1) ==1 )
{
bytes++;
if ( buffer[0]== ' ' || buffer[0] == '\t' )
{
state = WHITESPACE;
}
else if (buffer[0]=='\n')
{
newLine++;
state = WHITESPACE;
}
else
{
if ( state == WHITESPACE )
{
words++;
}
state = WORD;
}
last = buffer[0];
}
printf("%d %d %d %s\n",newLine,words,bytes,thefile);
}
}
}
答案 0 :(得分:2)
read(2)
接受filedescriptor作为第一个参数,而不是文件名
while (read(thefile,buffer,1) ==1 )
应该是
while (read(fileno(file),buffer,1) ==1 )
顺便说一下:启用和读取编译器警告会指出这种错误
编辑:
混合系统调用(read(2)
)和高级函数(fopen(3)
)通常不是一个好主意;使用fread(buffer, 1, 1, file)
或使用open(2)