从类型为"char*"的临时引用初始化类型为"char*&"的非常量引用
initialization of non-const reference of type 'char*&' from a temporary of type 'char*'
void test3(char * &p){
strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}
char c[] = "123";
test3(c);
上面的代码编译失败:
从类型为"char*"的临时引用初始化类型为"char*&"的非常量引用
为什么char c[]
不能被参数p
引用?
因为c
的类型是char[4]
,即四char
秒的轨迹。你的引用需要一个char*
,即指向char
的指针。
数组不是指针。在大多数情况下,它们在使用时衰减到指向第一个元素的指针,但衰减生成的指针是暂时的。因此,它不能绑定到非常量引用。
为什么你的函数首先要引用?拿char*
就完全没问题了.
您可以通过将中间变量作为以下内容来修改代码:
char c[] = "123";
char* tmp = c;
test3(tmp);
当您尝试复制比长度相对长的字符串时,您可能会损坏变量。
您可以通过添加修饰符 "const" 来修改代码,承诺您不会更改 c 的地址:
void test3(char * const &p){
strcpy( p, "aaaaaaaaaaaaaaaaaaaaaaaaaa");
}
char c[] = "123";
test3(c);
相关文章:
- 将 char 指针传递给接受对 char 数组的引用的函数
- 枚举类的 C 样式强制转换到基础类型 char 的引用
- 成员引用基类型 'char' 不是 C++ 中的结构或联合
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么要使用引用来获取 *char?当我们使用指针时,不使用引用不是更好吗?
- gtest - 未定义对"testing::InitGoogleTest(int*, char**)"的引用
- Qt5 对'QApplication::QApplication(int&, char**, int)'的未定义引用
- 悬空指向 int 和 char* 常量的指针/引用
- 来自类型为std::basic_string::const_iterator的非常量引用的无效初始化,并且<char>来自类型std::basic_string<char>::
- 类型为'std::string&的非常量引用的初始化无效,并且从类型为'std::basic_string<char>的右值
- 将 C++ 转换为 Python 通过引用返回无符号 char*
- 使用cout,如何将char转换为变量的地址/引用(?)
- 从运算符[]返回对映射的char*的引用
- Arduino:未定义的对"I2CRW::readByte(unsigned char, unsigned char)"的引用
- C# PInvoke - 返回 char* 和引用 char* 参数的函数
- 链接器错误(未定义的引用)与“静态 constexpr const char*”和完美转发
- 对'icu_56::UnicodeString::UnicodeString(signed char, unsigned short const*, int)' 的未定义引用
- 如何创建一个32位int和四个8位char类型的并集,每个类型都引用32位int的差分片
- __FILE__可以由C++中的const char*引用
- 从 (void *) "Un-casting"并取消引用 char 数组