【问题标题】:Passing const char * to a function in C将 const char * 传递给 C 中的函数
【发布时间】:2013-11-20 16:45:32
【问题描述】:

我正在尝试编写一个以const char * 作为参数的函数,但我不知道如何以有用的方式将此类数据传递给函数。如果我有功能:

void tokenize(const char * c) { }

我想用硬编码值调用这个函数,比如反斜杠,解决这个问题的最佳方法是什么?如何将硬编码值转换为 const char *

【问题讨论】:

    标签: c char constants


    【解决方案1】:

    使用字符串字面量代替const char * 参数是完全合法的:

    tokenize("\\");
    

    一个更具说明性的示例是存储指向该字符串的指针,然后传递该指针:

    const char *token = "\\";
    tokenize(token);
    

    然而,字符串文字与char * 不兼容,尽管编译器可能允许这样做。这与字符串文字的存储方式有关 - 它们通常位于内存的只读区域中,尝试写入它们会导致未定义的行为,很可能是某种保护错误。

    【讨论】:

    • 之所以有效,是因为硬编码的文字字符串(地址)const char *
    • @KlasLindbäck 在 C 中,字符串文字的类型为 char [],没有 const
    • @Yu Hao 我一直把它们当成const,因为它们通常存储在内存的只读区域中。考虑到这一点,规范是否说它们是const 真的无关紧要。
    • @KlasLindbäck 当然修改字符串文字是未定义的行为。但从语法层面来看,它们的正确类型不是const char *。尊重标准。
    【解决方案2】:

    您可以使用像"\\" 这样的字符串文字并将其作为参数传递给函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多