【问题标题】:Passing space as a parameter将空格作为参数传递
【发布时间】:2019-11-13 16:11:40
【问题描述】:

当将空格作为参数传递时,可以使用' ' 传递吗? 我目前正在重新创建printf

下面的代码是我传入的示例。

当它像这样传入时,它工作正常:

ft_printf("Start %-+# 0400.500hhiend\n");

这导致人们相信空格不能像' '这样的参数传入,但我只是想仔细检查一下。

传入:

ft_printf("Start %-+#' '0400.500hhiend\n");

解析代码:

while (fmt[count] == '-' || fmt[count] == '+' || fmt[count] == ' ' ||
       fmt[count] == '#' || fmt[count] == '0')

【问题讨论】:

  • 不看ft_printf的定义就无法判断。如果您在"...' '..." 中包含' ',则您只是在字符串本身中包含三个文字字符' '。请提供A Minimal, Complete, and Verifiable Example (MCVE)
  • 在 POSIX printf() 中,撇号 ' 是有效的格式修饰符,这意味着使用千位分组字符(struct lconv 中的 thousands_sep 来自 <locale.h>)。重复它是不必要的,但可能没有害处。格式的数字部分没有多大意义。 0 表示前导零(但您也有 - 左对齐;400 最小宽度非常宽;.500 最小位数通常小于400hhi表示(有符号的)字符值。奇数!
  • 感谢您迄今为止的反馈!让我们忽略我正在重新创建 printf 的事实。我认为这可能会误导我的核心问题。 "' ' 是否等同于将空格作为参数传递给函数?

标签: c parameter-passing whitespace


【解决方案1】:

不,它不能。 Printf 通过分析百分号和最终不可避免的类型转换(即“diouxXcspf”)之间的内容来解析字符串。

我想你总是可以通过一个符号列表(使用基本的词法分析器生成)来以更有效的方式解析字符串,这些符号表示不同的标志等,并根据它们是什么来调用不同的函数,这将防止“将空格作为参数传递”。

【讨论】:

    猜你喜欢
    • 2017-04-25
    • 2011-11-24
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多