C++ 类型为“的参数”;常量字符*”;与类型为“的参数不兼容”;字符*”;

C++ 类型为“的参数”;常量字符*”;与类型为“的参数不兼容”;字符*”;,c++,char,undefined,constants,string-literals,C++,Char,Undefined,Constants,String Literals,我正在尝试加入“ipapi.com/json/”并声明char“ip_address” 但“ipapi.com/json/”的下划线为红色,表示: argument of type "const char *" is incompatible with parameter of type "char *" 怎样才能做到呢 TCHAR path[_MAX_PATH]; _tcscpy(path, ip_address); _tcscat("ip-api.com/j

我正在尝试加入“ipapi.com/json/”并声明char“ip_address” 但“ipapi.com/json/”的下划线为红色,表示:

argument of type "const char *" is incompatible with parameter of type "char *"
怎样才能做到呢

TCHAR path[_MAX_PATH];
        _tcscpy(path, ip_address);
        _tcscat("ip-api.com/json/", ip_address);
在这个电话里

_tcscat("ip-api.com/json/", ip_address);
您正在尝试修改字符串文字

C++中的字符串文本具有常数字符数组的类型。因此,转换为指针后,它们的类型为

const char*

您不能更改字符串文字。任何更改字符串文字的尝试都会导致未定义的行为

此外,您必须保留足够大的内存,以便将
ip\u address
指向的字符串附加到字符数组中的另一个字符串

比如说

char address[_MAX_PATH] = "ip-api.com/json/";
_tcscat( address, ip_address);

你想在这里干什么<代码>\u tcscat(“ip api.com/json/”,ip\u地址)正在尝试将
ip_地址的内容添加到
“ip api.com/json/”
。您不能这样做。请记住,
strcat
函数(以及类似于
\u tcscat
函数的相关函数)将其目标作为第一个参数。还请记住,C++中所有文字字符串都是字符的常量数组。如何连接到常量数组?是的,ip-api.com/json/+ip_地址。为什么我不能?@prako2你怎么能访问它<代码>“ipapi.com/json/”
是字符串文本。您不能“重用”它。
typedef std::basic_string TCHARString。然后,当您使用
TCHARString
时,您就拥有了字符串类的所有可用操作,例如使用
运算符+
运算符+=
等进行连接,而无需确保有足够的空间、字符串文字问题等。谢谢!仍然很难理解,但我得到了我想要的。@prako2字符串文字通常存储在文字池中。例如,字符串文本“A”和“B”可以存储在池中,如{'A'、'\0'、'B'、'\0'}。因此,如果允许更改字符串文字,您将覆盖由字符串文字占用的内存。例如,如果(strcmp(s,“B”)==0,则该语句将无效。字符串文字已更改!