当我具有可以同时使用可变和不可变char *的函数时,如何避免发出警告

Tyl*_*den 1 c types

我有一个接受a char*作为参数的C函数,在某些情况下,我将a传递const char*给该函数。在内部,该函数在使用字符串之前先对其进行复制,因此它可以接受可变字符串或不可变字符串。

不幸的是,这会产生警告,因为在某些情况下,我会将const传递给函数。目前,我通过将输入强制转换为Plain来避免出现此警告char*。这是正确的做法吗?

Bar*_*mar 6

如果函数可以接受可变字符串和不可变字符串,因为它实际上从未修改过该字符串,则应将其声明为accept const char *。这不应该引起任何警告,也不需要强制转换参数。

将参数声明为指向const的指针表示不修改数据的承诺。如果函数定义确实尝试通过指针进行赋值,或者将其传递给未声明该参数的函数,则会在函数定义中出现错误const。但是调用者并不受限于参数的常数性-将可变数据传递给实际上不会对其进行突变的函数没有问题。

例如,请参阅的声明strcpy()

char * strcpy ( char * destination, const char * source );
Run Code Online (Sandbox Code Playgroud)

source参数声明const char *,但你可以复制一个可变的字符串。但是,您当然不能传递不可变的字符串作为destination参数(您必须将其强制转换为非const指针,以使编译器可以接受它,但是如果您实际传递不可变的字符串,则会导致未定义的行为)。

  • 不,我的意思是我写的。即使已声明为“ const char *”,也可以复制“ char *”。 (2认同)