当一个函数可以被赋予一个 char* 或文字字符串时,声明这个函数的正确方法是什么?
When a function is possible to be given a char* or literal string, what is the right way to declare this function?
这个问题不是问题:弃用从字符串文字到字符的转换
但是,是的,我正试图摆脱这个烦人的Clang警告。在该答案中,有以下几种方式:
- const_cast或(字符*)
- foo(char*) -> foo(const char*)
我还在警告弃用从字符串常量到"char"的转换中找到了一些解决方案
- 结构 -
- Wno-write-string
我的进一步问题是:
-
如何在 Xcode 中设置 -Wno-write-string?或者 Clang 中真的有这样的标志,就像在 gcc/g++ 中一样?我没有在叮当旗参考中找到它
-
在我的代码中,我得到了定义为 foo(char*) 的函数,它们在一段时间内接收字符串或 char*,并在其他时间接收文字字符串(例如"hello")。对于这种情况,正确的或正确的方法来定义/定义foo是什么?
您只需将函数的输入参数设为const char*
即可,它就可以工作。输入参数为 const char*
的函数意味着该函数不会更改指针指向的内容!因此,这意味着它将同时使用字符串文字(它们本身const char*
)和常规char*
参数。
void printString(const char* str)
{
printf("%s", str);
}
可以像这样调用此函数:
int main()
{
const char* pointerToLiteral = "string";
char* str = new char[16];
std::strcpy(str, pointerToLiteral );
printString("true literal");
printString(pointerToLiteral );
printString(str);
delete [] str;
}
当您将指针传递给函数printString
它会在其堆栈上复制该指针。该副本现在属于 const char*
型。这意味着printString
代码无法更改指针指向的内容。如果将类型为 char*
的指针传递给它,则没有理由这样做不起作用。
请注意,反之则行不通。如果我们有 printString(char* str)
,你不能给它传递一个const char*
参数,因为现在函数说它也可以更改指针指向的内容,但const char*
参数不允许这样做!
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用