0

我正在尝试从文件中读取一些整数。该程序编译没有错误,但它不打印整数。

int main(int argc,char *argv[]){
if(argc != 2){
    printf("Use %s file_name", argv[0]);
}
else{
    char file_name[255];
    int df,n=0,v[1000],tmp,i;
    strcpy(file_name,argv[1]);
    df=open(file_name,O_RDONLY);
    while(read(df,tmp,sizeof(n))>0){
        v[n++] = tmp;
    }
    for(i=0;i<n;i++){
        printf("%d ",v[i]);
    }
}
return 0;}

新代码:

 int main(int argc,char *argv[]){
if(argc != 2){
printf("Use %s file_name", argv[0]);
}
else{
char file_name[255];
int df,n=0,v[1000],tmp,i;
strcpy(file_name,argv[1]);
if ((df=open(file_name,O_RDONLY) ) < 0) {
perror("Cannot open output file\n"); exit(1);
}
while( n != 1000 && ( read(df,&v[n++],sizeof(*v)) > 0) ){}
for(i=0; i!=n; i++){
printf("%c ",(char)v[i]);
}
}
return 0;
}

甚至在它只显示其中 2 个而不是 3 个位模式之前,即使我的文件中有 3 个字符

4

2 回答 2

1

Read 需要一个指向缓冲区的指针,因为它是第二个 arg

int main(int argc,char *argv[]){
if(argc != 2){
    printf("Use %s file_name", argv[0]);
}
else{
    char file_name[255];
    int df,n=0,v[1000],tmp,i;
    strcpy(file_name,argv[1]);
    if ((df=open(file_name,O_RDONLY) ) < 0) {
    perror("Cannot open output file\n"); exit(1);
    }
    while( n != 1000 && ( read(df,&v[n++],sizeof(*v)) > 0) ){}
    for(i=0; i!=n; i++){
        printf("%d ",v[i]);
    }
}
return 0;
}

我实际上很惊讶您的程序没有段错误-您使用未初始化的 int 作为指针值。您需要检查文件是否已成功打开。您还需要确保不会溢出缓冲区,因此您需要在每次迭代时检查 n 。此外,无需使用临时变量,您可以直接写入缓冲区。

于 2013-01-12T18:03:53.397 回答
0

read 需要一个 void* ,因此您需要传递要用于存储值的变量的地址

试试这个

int main(int argc,char *argv[]){
    if(argc != 2){
        printf("Use %s file_name", argv[0]);
    }
    else{
        char file_name[255];
        int df,n=0,v[1000],tmp,i;
        strcpy(file_name,argv[1]);
        df=open(file_name,O_RDONLY);
        while(read(df,&tmp,sizeof(n))>0){
            v[n++] = tmp;
        }
        for(i=0;i<n;i++){
            printf("%d ",v[i]);
        }
    }
    return 0;
}

我只是用 &temp 改变了温度

于 2013-01-12T18:39:19.430 回答