首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果fgets大于指定的大小,如何添加错误消息以重试,而程序不会自动关闭

在处理fgets函数返回的输入时,如果输入的大小超过了指定的大小,可以通过以下步骤来添加错误消息以重试,同时确保程序不会自动关闭:

  1. 首先,需要定义一个足够大的缓冲区来存储输入的数据。可以使用字符数组或者动态分配的内存来实现。
  2. 在调用fgets函数之前,需要检查输入的大小是否超过了指定的大小。可以使用strlen函数来获取输入的长度,并与指定的大小进行比较。
  3. 如果输入的大小超过了指定的大小,可以使用错误消息来提示用户重新输入。可以使用printf函数输出错误消息,例如:"输入超过了指定的大小,请重新输入"。
  4. 在输出错误消息后,可以使用循环来继续获取输入,直到输入的大小符合要求为止。可以使用while循环来实现。
  5. 在循环中,需要再次调用fgets函数来获取输入。可以使用相同的缓冲区来存储输入的数据。
  6. 在获取输入后,需要再次检查输入的大小是否符合要求。如果符合要求,则可以继续处理输入的数据。如果不符合要求,则需要继续输出错误消息并重新获取输入。

以下是一个示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <string.h>

#define MAX_SIZE 100

int main() {
    char input[MAX_SIZE];
    char* result;

    do {
        printf("请输入字符串:");
        result = fgets(input, sizeof(input), stdin);
        if (result == NULL) {
            printf("读取输入失败\n");
            return 1;
        }

        // 检查输入的大小是否超过了指定的大小
        if (strlen(input) > MAX_SIZE) {
            printf("输入超过了指定的大小,请重新输入\n");
        }
    } while (strlen(input) > MAX_SIZE);

    // 处理输入的数据
    printf("输入的字符串是:%s\n", input);

    return 0;
}

在上述示例代码中,如果输入的字符串超过了指定的大小(MAX_SIZE),程序会输出错误消息并要求用户重新输入,直到输入的大小符合要求为止。然后,程序会继续处理输入的数据。

请注意,上述示例代码仅演示了如何处理fgets函数返回的输入大小超过指定大小的情况,并没有涉及到云计算或其他相关领域的知识。如果需要了解更多关于云计算或其他领域的知识,请提供相关的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Apache Kafka - 重识Kafka生产者

retries 该配置项指定了生产者在发送消息失败后重试次数。默认值为 0,表示不进行重试。...如果设置为大于 0 值,则当发送消息失败时,生产者会自动进行重试,直到达到最大重试次数或发送成功为止。 batch.size 该配置项指定了生产者在发送消息批量大小。...如果设置为大于 0 值,则表示等待指定时间后再发送,以便将更多消息打包在一起。 buffer.memory 该配置项指定了生产者用于缓存尚未发送消息缓冲区大小。...如果消息体较大,可以考虑使用压缩算法,减少网络负载和存储空间。...如果设置得太小,则可能会导致吞吐量下降;如果设置得太大,则可能会导致网络负载过大。 max.request.size 该配置项指定了生产者发送消息时允许最大消息大小

30530

CC++ (stdio.h)标准库详解

buffer:指向用户提供缓冲区指针。如果这个参数是 NULL,则库函数会为流自动分配一个缓冲区。 mode:指定缓冲区模式。有效模式有: _IONBF:关闭缓冲。...当流关闭 (fclose) 或程序正常终止时,创建临时文件会自动删除。如果程序异常终止,是否删除文件取决于具体系统和库实现。...请注意,fputs 与 put 不同之处不仅在于可以指定目标流,而且 fputs 不会写入其他字符, puts 会自动在末尾附加换行符。...然后使用 ferror 函数来检查文件流错误标志,确定文件操作是否发生了错误如果发生了错误,则输出相应错误信息。最后关闭文件并返回 0。...如果是 null 指针,则不会打印前面的自定义消息,但仍会打印错误消息。 按照惯例,应用程序本身名称通常用作参数。

73510
  • gets 、getchar 、fgets 、scanf用法

    ,并在最后自动添加一个’\0’。...3.fgets   从文件或标准输入接收一串字符,遇到’\n’时结束,把’\n’也作为一个字符接收;把接收一串字符存储在形式参数指针指向空间,并在’\n’后再自动添加一个’\0’。...函数 gets 可以无限读取,不会判断上限,所以程序员应该确保 buffer 空间足够大,以便在执行读操作时不发生溢出。...相对于 gets 函数,fgets 函数最大改进就是能够读取指定大小数据,从而避免 gets 函数从 stdin 接收字符串不检查它所复制缓冲区空间大小导致缓存溢出问题。...("输出: %s\n",buffer); return 0; }   对于上面的示例代码,如果输入字符串小于或等于 10 个字符,那么程序将完整地输出结果;如果输入字符串大于 10 个字符,那么程序将截断输入字符串

    3.1K60

    C语言文件操作

    如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区大小根据C编译系统决定。...因为有缓冲区存在,C语⾔在操作⽂件时候,需要做刷新缓冲区或者在⽂件操作结束时候关闭⽂ 件。 如果不做,可能导致读写⽂件问题。...fgets和fputs fgets从流中获取字符串并将其作为C字符串存储到str中,直到读取(num-1)个字符,或者到达换行符或文件结束符,先发生为准。...fputs将字符串写入流函数从指定地址(str)开始复制,直到到达结束空字符('\0')。这个终止空字符不会复制到流中。...(注意,fputs与puts不同之处不仅在于可以指定目标流,而且fputs不会写入额外字符,puts会自动在末尾附加一个换行符。)

    5510

    Kafka系列2:深入理解Kafka生产者

    如果没有指定分区 ,那么分区器会根据 ProducerRecord 对象键来选择一个分区,紧接着,这条记录被添加到一个记录批次里,这个批次里所有消息会被发送到相同主题和分区上。...生产者在收到错误之后会尝试重新发送消息如果达到指定重试次数后还没有成功,则直接抛出异常,不再重试。...如果程序发送消息速度超过了发送到服务器速度,会导致生产者缓冲区空间不足,这时候调用send()方法要么被阻塞,要么抛出异常。 compression.type 默认情况下,发送消息不会被压缩。...retries 指定了生产者放消息发生错误后,消息重发次数。如果达到设定值,生产者就会放弃重试并返回错误。...那么如果第一个批次消息写入失败,第二个成功,Broker会重试写入第一个批次,如果此时第一个批次写入成功,那么两个批次顺序就反过来了。也即,要保证消息是有序消息是否写入成功也是很关键

    95720

    03 Confluent_Kafka权威指南 第三章: Kafka 生产者:向kafka写消息

    当分区选出新leader时候,可以解决无leader错误。KafkaProducer可以配置为对这些错误进行自动重试,因此只有当重试次数达到最大还没有解决这些错误时,程序代码才会返回不可重试异常。...有些错误异常无法通过重试来解决,例如,消息大小太大,这种情况下,kafkkaProducer不会尝试重试,将立即返回错误。...如果超时而没有应答,生产者将返回重试或者响应一个错误超时(通过异常或者发送回调)。timeout.ms控制broker等待同步副本确认消息满足acks配置时间。...通常再可靠性要求较高系统中,将重试次数设置为0时不可选,因此,要保证顺序性关键就是设置in.flight.requests.per.session=1,确保一批消息重试时候,将不会发送其他消息...这个例子说明了使用avro好处,即使我们在没由更改读取数据全部应用程序情况下更改了消息模式,也不会出现异常和中断错误,也不需要对全部数据进行更新。

    2.8K30

    【Linux】进程间通信——命名管道

    0,失败返回-1 ---- 管道文件使用 将hello world 重定向到fifo管道中 但是好像并不会写入 fifo只代表一种符号,向符号写入消息不会刷新到磁盘上,而是只会把hello world...写到管道中 但是管道文件是内存文件,所以大小不会改变 ---- 通过赋值SSH渠道,创建终端2 在保证终端1输出重定向 运行情况下 cat默认从显示器中读取 在终端2中 使用输入重定向 将 fifo...==0,说明读到文件结尾,当写端关闭时,读端才会读到文件结尾 若返回<0,说明读取失败,则返回错误码 3....---- 为了避免输入单词有空格存在 输入 man fgets 指令 从指定流中获取字符串,并规定字符串大小 ---- 因为有两个可执行程序存在,所以需要两个终端 当终端2没有运行server...时,没有管道文件存在,终端1运行server后,终端1中出现管道文件 ---- 当终端1运行client时,输入对应信息,终端2中会自动显示出来 client端可以将信息发送给server端 完整代码

    1.9K30

    RocketMQ

    默认情况下生产者会把消息Round Robin轮询方式发送到不同Queue分区队列;消费消息时会从多个Queue上拉取消息,这种情况下发送和消费是不能保证顺序。...3、使用mqadmin命令手动创建Topic时指定Queue数量。 分区有序 如果有多个Queue参与,其仅可保证在该Queue分区队列上消息顺序,则称为分区有序。 如何实现Queue选择?...情况 // 若存在某条消息,其本身大小大于4M,这个分割器无法处理,其直接将这条消息构成一个子列表返回。...加载配置文件中添加如下属性,开启该功能: enablePropertyFilter = true 在启动Broker时需要指定这个修改过配置文件。...死信队列 什么是死信队列 当一条消息初次消费失败,消息队列会自动进行消费重试;达到最大重试次数后,若消费依然失败,则表明消费者在正常情况下无法正确地消费该消息,此时,消息队列不会立刻将消息丢弃,而是将其发送到该消费者对应特殊队列中

    2.6K84

    【C语言基础】:文件操作详解(后篇)

    注意,fputs与puts不同之处不仅在于可以指定目标流,而且fputs不会写入额外字符,puts会自动在末尾附加一个换行符。...size:每个数据项大小字节为单位)。 count:要读取数据项数量。 stream:指向文件指针,它指定了从中读取数据文件。...对于二进制模式打开流,通过将偏移量添加到由origin指定参考位置来定义新位置。...标准采用“缓冲文件系统” 处理数据文件,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用文件开辟⼀块“文件缓冲区”。...如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区大小根据C编译系统决定

    13910

    Kafka 生产者哪些重要参数是我们需要注意

    不过了解这些参数可以让我们更合理地使用生产者客户端,其中还有一些重要参数涉及程序可用性和性能,如果能够熟练掌握它们,也可以让我们在编写相关程序时能够更好地进行性能调优与故障排查。...消息在从生产者发出到成功写入服务器之前可能发生一些临时性异常,比如网络抖动、leader 副本选举等,这种异常往往是可以自行恢复,生产者可以通过配置 retries 大于0值,以此通过内部重试来恢复不是一味地将异常抛给生产者应用程序...如果将 retries 参数配置为非零值,并且 max.in.flight.requests.per.connection 参数配置为大于1值,那么就会出现错序现象:如果第一批次消息写入失败,第二批次消息写入成功...4. compression.type 这个参数用来指定消息压缩方式,默认值为“none”,即默认情况下,消息不会被压缩。该参数还可以配置为“gzip”“snappy”和“lz4”。...5. connections.max.idle.ms 这个参数用来指定在多久之后关闭闲置连接,默认值是540000(ms),即9分钟。

    48071

    Kafka生产者哪些重要参数是我们需要注意

    不过了解这些参数可以让我们更合理地使用生产者客户端,其中还有一些重要参数涉及程序可用性和性能,如果能够熟练掌握它们,也可以让我们在编写相关程序时能够更好地进行性能调优与故障排查。...消息在从生产者发出到成功写入服务器之前可能发生一些临时性异常,比如网络抖动、leader 副本选举等,这种异常往往是可以自行恢复,生产者可以通过配置 retries 大于0值,以此通过内部重试来恢复不是一味地将异常抛给生产者应用程序...如果将 retries 参数配置为非零值,并且 max.in.flight.requests.per.connection 参数配置为大于1值,那么就会出现错序现象:如果第一批次消息写入失败,第二批次消息写入成功...4. compression.type 这个参数用来指定消息压缩方式,默认值为“none”,即默认情况下,消息不会被压缩。该参数还可以配置为“gzip”“snappy”和“lz4”。...5. connections.max.idle.ms 这个参数用来指定在多久之后关闭闲置连接,默认值是540000(ms),即9分钟。

    1.5K50

    C 标准库基础 IO 操作总结

    打开文件应该与关闭文件成对存在,虽然程序在退出时会释放相应资源,但是对于一个长时间运行服务程序来说,经常打开关闭文件是会造成进程资源耗尽,因为进程文件描述符个数是有限,及时关闭文件是个好习惯...,用户不可以指定缓冲区大小,很容易造成缓冲区溢出错误。...不过 strcpy 程序员还是可以避免, gets 输入用户可以提供任意长字符串,唯一避免方法就是不使用 gets,而使用 fgets(buf, size, stdin) fgets 函数从 stream...所指文件读取 ‘\n’ 结尾一行,包括 ‘\n’ 在内,存到缓冲区中,并在该行结尾添加一个 ‘\0’ 组成完整字符串。...flush 操作,如果: 用户程序调用库函数从无缓冲文件中读取 或从行缓冲文件中读取,且这次读操作会引发系统调用从内核读取数据,那么会读之前自动 flush 所有行缓冲 程序退出时通常也会自动 flush

    97230

    文件顺序读写——顺序读写函数——fgets、fgetc、fputs、 fputc

    如果调用时流位于文件末尾,则该函数将返回 EOF 并设置流文件末尾指示器 (feof) 。 返回值: 如果发生读取错误,该函数将返回 EOF 并设置流错误指示器 (ferror)。...如果发生其他读取错误,该函数也会返回 EOF,但会设置其错误指示器 (ferror)。 举例: 创建一个文件,并向其中写入小写字母a到z,然后关闭文件。...该函数从指定地址 (str) 开始复制,直到到达终止 null 字符 ('\0')。此终止 null 字符不会复制到流中。...fputs 与 puts不同之处在于可以指定目标流,而且 fputs 不会写入其他字符, puts 会自动在末尾附加一个换行符。...fgets 与 gets 有很大不同:fgets 不仅接受流参数,还允许指定 str 最大大小,并在字符串中包含任何结束换行符。

    10510

    C 语言文件操作详解

    数据在内存中⼆进制形式存储,如果不加转换输出到外存⽂件中,就是⼆进制⽂件。 如果要求在外存上ASCII码形式存储,则需要在存储前转换。...可以通过 offset 和 whence 参数指定位置。 ftell:用于获取当前文件指针位置,字节为单位。它可以帮助你确定文件指针在文件中具体位置。...1.相关函数 1.perror 功能:perror 用于输出错误信息。它将描述 errno 变量中存储错误代码对应错误信息,并附加一个自定义错误消息前缀。...用法: void perror(const char *str); 参数:str:自定义错误消息前缀,通常是描述错误来源字符串。它会与 errno 中错误信息一起输出。...之后使用 feof 检查是否因为到达文件末尾结束循环。 3. ferror 功能:ferror 用于检查文件流是否发生了读取或写入错误

    16810

    CCPP输入输出函数汇总分析

    ,该行字符数 不大于num-1.因为fgets函数会在末尾加上一个空字符构成一个字符串.另外fgets在读取到换行符后不会将其省略. fputs() int fputs(char *str, file...它从指定文件中读取下一个字符并返回该字符,如果到达文件末尾或发生错误,则返回 EOF。...补充:必须指定用户进程缓冲区长度n,即buf大小,此函数从流中一直读到下一个换行符为止,但是不超过n-1个字符,读入字符被送入用户缓冲区buf中。该缓冲区null字符结尾。...fgets和fputs在处理换行符,本着实事求是的态度,有就有,没有就没有,不会在用户buf和流缓冲以及文件中自己添加,只是在数据经过流缓冲时,增加或是过滤到null字符。...当fgets时会在用户buf中增加一个null标识用户buf结束,fputs时,null为终止字符,但是尾端null并不写在流中。

    1.8K20

    04 Confluent_Kafka权威指南 第四章: kafka消费者:从kafka读取数据

    如果我们将另外一个消费者C2添加到组G1,每个消费者将分别从其中两个分区获得消息,可能分区0和2消息会被C1消费,1和3消息将会被C2消费。 ?...在第二章中介绍了如何选择一个topic分区数量。 除了通过添加消费者扩展单个应用程序之外,多个应用程序从同一个主题读取数据情况也很常见。...要确保应用程序获得topic中所有消息,需要确保应用程序使用自己消费者组。与许多传统消息队列系统不同,kafka可以扩展到大量消费者和消费者组不会降低性能。...你可以将消费者添加到现有的消费者组,扩展对topic消息读取和处理,消费者组中额外各个消费者只能获得消息子集。...只要没有无法恢复错误,commitSync就会尝试重试提交。如果发生了无法恢复错误,我们除了记录错误之外没有更好办法。

    3.5K32

    斗转星移 | 三万字总结Kafka各个版本差异

    KIP还为这样阻塞API添加了重载,支持指定每个阻塞API使用特定超时,不是使用默认超时设置default.api.timeout.ms。...如果客户端连接验证失败,则不会执行重试。 自定义SaslServer实现可能会抛出SaslAuthenticationException提供错误消息返回到客户端,指示身份验证失败原因。...还要注意,虽然先前代理将确保在每个获取请求中返回至少一条消息(无论总数和分区级提取大小如何),但现在相同行为适用于一个消息批处理。...而是返回UNKNOWN_TOPIC_OR_PARTITION错误代码。这可能会在使用生产者和消费者时导致意外超时或延迟,因为Kafka客户端通常会在未知主题错误自动重试。...如果找到大于响应/分区大小限制消息,则消费者和副本可以取得进展。更具体地说,如果获取第一个非空分区中第一条消息大于其中一个或两个限制,则仍将返回该消息

    2.3K32

    Kafka 事务之偏移量提交对数据影响

    如果提交偏移量大于客户端处理最后一个消息偏移量,那么处于两个偏移量之间消息将会丢失。 因此,如果处理偏移量,会对客户端处理数据产生影响。...如果发生了再均衡,从最近一批消息到发生再均衡之间所有消息都将被重复处理。 同时在这个程序中,只要没有发生不可恢复错误,commitSync() 方法会一直尝试直至提交成功。...在成功提交或碰到无法恢复错误之前,commitSync() 会一直重试,但是 commitAsync() 不会,这也是 commitAsync() 不好一个地方。...回调经常被用于记录提交错误或生成度量指标。如果要用它来进行重试,则一定要注意提交顺序。 ?...如果直接关闭消费者,就没有所谓“下一次提交”了,因为不会再调用poll()方法。使用 commitSync() 方法会一直重试,直到提交成功或发生无法恢复错误

    1.4K10

    真的,关于 Kafka 入门看这一篇就够了

    传递消息:Kafka 另外一个基本用途是传递消息,应用程序向用户发送通知就是通过传递消息来实现,这些应用组件可以生成消息不需要关心消息格式,也不需要关心消息如何发送。...,不仅消息不会被接收,还会收到 broker 返回错误消息。...跟其他与字节相关配置参数一样,该参数指的是压缩后消息大小,也就是说,只要压缩后消息小于 mesage.max.bytes,那么消息实际大小可以大于这个值 这个值对性能有显著影响。...比如连接错误,可以通过再次建立连接来解决;无主错误则可以通过重新为分区选举首领来解决。KafkaProducer 被配置为自动重试如果多次重试后仍无法解决问题,则会抛出重试异常。...另一类错误是无法通过重试来解决,比如消息过大对于这类错误,KafkaProducer 不会进行重试,直接抛出异常。

    1.3K22
    领券