C++ 类型为“的参数”;常量字符*”;与类型为“的参数不兼容”;字符*”;
我正在尝试加入“ipapi.com/json/”并声明char“ip_address” 但“ipapi.com/json/”的下划线为红色,表示: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
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,则该语句将无效。字符串文字已更改!