【发布时间】:2015-03-14 16:22:44
【问题描述】:
我尝试使用 read() 从文件中获取一些字符,只是为了学习这个 API。我在同一目录中创建了一个名为“file”的文件,它是内容:
1:2:ab:cd:ef
代码如下:
#include <stdio.h>
#include <error.h>
int read_indent(int sockfd){
int sport, cport;
char user[3], rtype[3], addinfo[3];
char buffer[4+4+3+3+3+1];
if(read(sockfd, buffer, sizeof(buffer)) <= 0) {
perror("read: %m");
return -1;
}
buffer[sizeof(buffer)-1] = '\0';
sscanf(buffer, "%d:%d:%s:%s:%s", &sport, &cport, rtype, user, addinfo);
printf("%d:%d:%s:%s:%s", sport, cport, rtype, user, addinfo);
return 0;
}
int main(){
FILE *file_pt = fopen("file", "r");
if(file_pt == NULL) { printf("fopen error\n"); return -1;}
char buf[128];
int a = read_indent(fileno(file_pt));
fclose(file_pt);
return 0;
}
我的 printf 返回我
1:2:ab:cd:ef::xPvx
x 是一些我无法识别的垃圾字符。这是什么原因? int 在我的系统中是 4 个字节。
【问题讨论】:
-
你是否在每个字符串的末尾留了一个空格,并存储了一个尾随的 0 字符?
-
您能详细说明一下吗?我认为我的用户 [3] 包含额外的字符来存储 '\0',因为我的文件只有
ab。同样,我为 rtype 和 addinfo 创建了三个条目。我还为最后一个'\0'创建了一个额外的...这可能是基本的,但我不确定你的意思