gpt4 book ai didi

c - printf 什么时候返回负数?

转载 作者:太空宇宙 更新时间:2023-11-03 23:43:20 25 4
gpt4 key购买 nike

我不太确定 C 中的 printf 函数何时返回负数。我知道 printf 在打印字符串失败时会返回一个负数,很可能是 -1。但是我想知道为什么以及什么时候打印字符串失败。例如我的代码在这里:

    #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma pack(1)
typedef struct{
char name[14];
int age;
int yearofbirth;
}person;
int print(person var)
{
if(printf("%s\n", var.name)<0)
{
if(printf("%d\n", var.age)<0)
{
if(printf("%d\n\n", var.yearofbirth)<0)
{
return 1;
}
}

}
return 0;
}
int main(void)
{
int i=0;
person thing;
FILE* file=fopen("Data.txt", "r");
if(file)
{
long amountofstruct = 0;
char* z=(char*)malloc(sizeof(char)*200);
while(fgets(z,100,file)!=NULL)
{
amountofstruct++;
}
fseek(file,0,SEEK_END);
free(z);
int k=0;
/* while(k<amountofstruct)
{
fseek(file,sizeof(person)*k,SEEK_SET);
fread(&function[k], sizeof(person),1,file);
k++;
}
int szt;
printf("%p",function);
for(szt=0;szt<amountofstruct;szt++)
{
printf("Person %d:\tName:%s\t Age:%i\t Year Of Birth:%i\n",szt+1,function[szt].name,function[szt].age,function[szt].yearofbirth);
}*/
printf("thesizeofstruct:%ld\n",sizeof(person));
printf("%ld",amountofstruct);
//thing.name = {' ',' ',' ',' ',' ',' ',' ',' ',' ','\0'};

char *l = (char*)malloc(11);
while(k<amountofstruct)
{

fseek(file,sizeof(person)*k,SEEK_SET);
if(fread(&thing, sizeof(thing), 1, file)!=0)
{
thing.name[13]='\0';
// printf("sizeof(thing string)%lu\n sizeof(thing)%lu\n", sizeof(thing.name),strlen(thing.name));
if(print(thing)==0)
{
printf("\nThe thing failed, sorry");
return 0;
}
//char *p = strchr(thing.name, ' ');
// *p='\0';
// strcpy(l,thing.name);
//printf("Person %d: \t Name: %s\t Age: %d\t Year Of Birth: %d\n", k+1, l, thing.age, thing.yearofbirth);
// thing.name[0]='\0';
// thing.age=0;
// thing.yearofbirth=0;
k++;
}
}
free(l);
}
else
{
perror("The file could not be opened");
}
getchar();
return 0;
}

printf 在函数 print 中打印整数 var.age 和 var.yearofbirth 总是返回一个负数。线路

printf("%s\n", var.name);

在函数中打印成功,但仅此而已。但是在我的Data.txt里面,每个人的年龄和出生年份都非常清楚的提供如下。

    Name   Age   YearofBirth

那么为什么 printf 会返回一个负数呢?谢谢你,

最佳答案

printf(3) 将返回 -1 例如,如果您 fclose(3) FILE在调用 printf() 之前与其关联的描述符。另一个例子是,如果其他一些进程撤销了你的文件描述符,或者磁盘充满了数据,或者你超过了磁盘配额,或者套接字由于某种原因关闭(case stdout is associated)到 socket )。有很多东西可以使 printf(3) 函数系列返回 -1。通常,它与外部事件相关联,外部事件与它在内部执行的系统调用相关联。假设您正在 printf() 到管道,并且读取进程(接收数据的进程)突然终止。您的 printf() 将无法 write(2) 缓冲区数据并从 write(2) 接收到错误,然后它将返回-1 并且您必须检查 errno 以了解错误的实际原因。

关于c - printf 什么时候返回负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com