-2
我正在做一個簡單的C版本的貓。C - 打開/閱讀推送垃圾
一切正常,但當我在做prinf時,它會附加一些垃圾。
這是什麼/爲什麼?
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
int main(int argc, char *argv[]) {
FILE *fp;
int i,n;
char ch;
int f;
char buffer[1024];
//nao foi especificado nenhum ficheiro
if(argc<2){
printf("usar mycat <ficheiro> \n");
return 0;
}
for(i=1; i<argc;i++){
//fp = fopen(argv[i],"r");
f = open(argv[i], O_RDONLY);
//Nao existe ficheiro
//if(f == NULL) {
if(f == -1) {
printf("%s: Nao existe esse ficheiro\n", argv[i]);
return 0;
}
/*
while((ch=fgetc(fp)) != EOF){
putchar(ch);
}
*/
while((n=read(f,buffer,1024)) > 0) {
printf("%s",buffer);
}
//fclose(f);
close(f);
}
return 1;
}
忽略被評論的fopen代碼。
不得不放一些更多的文字,因爲我得到它看起來像你的文章是motly代碼,請添加一些更多的細節。
請理解[mcve](/ help/mcve)的含義 - 這意味着在發佈您的問題之前,您需要刪除所有不必要的代碼和評論。至於錯誤,'read'返回一個不是以0結尾的字符串,所以你不能在'printf(「%s」)''中使用它。例如用'write(1,buffer,n)'替換你的printf。 –
@AnttiHaapala 1是stdout?其他選項應該加入和\ 0到緩衝區? –