【问题标题】:fscanf - using too long stringfscanf - 使用太长的字符串
【发布时间】:2009-06-04 20:16:50
【问题描述】:

字符优先[10];

字符秒[10];

什么是 fscanf(fr,"%s %s\n",first,second);第一个字符串太长时怎么办?

我可以只使用 char *first 而不使用 malloc 吗?并且指针会显示到字符串?

【问题讨论】:

    标签: c


    【解决方案1】:

    您可以使用宽度(即“%9s”)来限制字符串的大小。例如,请参阅Microsoft's documentation

    使用指针而不将其初始化为任何东西是使程序崩溃或表现不佳的可靠方法。

    【讨论】:

    • 但我可以有小于 10 的字符串。在那种情况下,我不会得到它。
    • 来自文档:“如果在达到宽度之前出现空白字符(空格、制表符或换行符)或无法根据给定格式转换的字符,则可能会读取少于宽度的字符。 "
    • 还有一件事 - 给 fscanf 的宽度应该比字符串的大小小一,以允许空终止符。我将更新我的示例。
    【解决方案2】:

    如果您使用的是 glibc,则可以一次性解决这两个问题 - 使用 %as 格式说明符。

    它会自动分配足够大的字符串来容纳内容。

    像这样:

    char *first, *second;
    
    scanf(fp, "%as %as\n", first, second);
    

    注意:这是 GNU 扩展!

    【讨论】:

      【解决方案3】:

      当第一个字符串太长时,你会遇到buffer overflow.的问题

      至于你问题的第二部分,如果你不使用 malloc,那么它将指向垃圾内存。字符串可能会在那里停留一段时间,但不能保证,如果该内存段被其他东西使用,您将丢失您的字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-19
        相关资源
        最近更新 更多