错误传递字符串作为指针,无法将const char*分配给char*
Error passing strings as pointers, cannot assign const char* to char*
我正在从教科书中学习C (C :初学者指南,第二版,Herbert Schildt)。以下程序代码来自本书,但导致错误,有人可以向我解释为什么不允许这样做?
目的是将指针作为参数演示:
#include <iostream>
using namespace std;
char *get_substr(char *sub, char *str); //function prototype
int main()
{
char *substr;
substr = get_substr("three", "one two three four");
cout << "substring found: " << substr;
return 0;
}
我不会列出功能主体,因为它会按照您的预期进行,但是即使它返回零,也会导致以下错误:E0167类型" const char *"的参数与类型" char *"的参数不兼容,引用了函数调用。我的理解是,无论如何,基本上是C中的字符串是Char的数组,为什么不允许这样做,什么是合适的选择?预先感谢您。
您的书是旧的,并且不再符合标准,因为char*
英列符必须为const
,因为C 11:
const char *get_substr(const char *sub, const char *str);
看看策划的C 书籍列表。
诸如"三"之类的字符串文字是const char [N]
数据类型的。通过的论点不符合C 11标准。以下用法应解决您的问题
const char *get_substr(const char *sub, const char *str);
这是您的快速指南https://www.geeksforgeeks.org/difference-const-char-p-char-char-char-const-p-const-con-char-const-p/
您的编译器抱怨,因为您将字符串字面馈送到可能需要修改的函数。
大概,您的get_substr()
函数不会修改输入字符串,也不会修改您正在寻找的字符串(任何一个参数)。
如果您知道您的功能,则可以将其原型更改为
const char *get_substr(const char *sub, const char *str);
这具有以下效果:
- 如果您尝试修改功能正文中的任何一个字符串
- 编译器将可以自由假设您的函数不会更改数据,并且当您使用
const
数据(例如文字)作为函数的参数时不会抱怨
相关文章:
- 在字符串函数中抛出'char const*'实例后调用的终止
- 双重标准?为什么只有 char* const&a = "bla" 的警告?
- 包括"lvtocon.h",未定义对'operator<<(std::ostream&, char const*)的引用
- 为什么 const char* const & = 可以编译"hello"?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 如何将std::wstring转换为char const[]
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 使用提升对字符串进行标记化时,将令牌转换为 char* const* 时失败
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 将 std::vector<std::string> 转换为 const char* const*
- 引发"char const*"错误的实例后调用的终止
- 将const char * const参数成员分配给新值
- 从'const char**'到'char* const*'的转换无效
- 从 sub_match<常量字符 *>' 转换为'const char *const &'
- char*const和constchar*之间有什么区别?(重复-需要更多澄清)
- 使用工厂方法时编译器错误:无法转换"const std::p air<char* const
- HEVC 解码器端口 Android 警告:从 'signed char*' 到 'char const* 的转换无效*
- 如何从'char const*'中删除常量
- 'char const *str'作为模板参数
- 为什么不;t strlen(.)应为const char*const str,而不是const char*