【发布时间】:2013-11-20 16:45:32
【问题描述】:
我正在尝试编写一个以const char * 作为参数的函数,但我不知道如何以有用的方式将此类数据传递给函数。如果我有功能:
void tokenize(const char * c) { }
我想用硬编码值调用这个函数,比如反斜杠,解决这个问题的最佳方法是什么?如何将硬编码值转换为 const char *?
【问题讨论】:
我正在尝试编写一个以const char * 作为参数的函数,但我不知道如何以有用的方式将此类数据传递给函数。如果我有功能:
void tokenize(const char * c) { }
我想用硬编码值调用这个函数,比如反斜杠,解决这个问题的最佳方法是什么?如何将硬编码值转换为 const char *?
【问题讨论】:
使用字符串字面量代替const char * 参数是完全合法的:
tokenize("\\");
一个更具说明性的示例是存储指向该字符串的指针,然后传递该指针:
const char *token = "\\";
tokenize(token);
然而,字符串文字与char * 不兼容,尽管编译器可能允许这样做。这与字符串文字的存储方式有关 - 它们通常位于内存的只读区域中,尝试写入它们会导致未定义的行为,很可能是某种保护错误。
【讨论】:
const char *。
char [],没有 const。
const,因为它们通常存储在内存的只读区域中。考虑到这一点,规范是否说它们是const 真的无关紧要。
const char *。尊重标准。
您可以使用像"\\" 这样的字符串文字并将其作为参数传递给函数。
【讨论】: