NSString* to char*?
NSString* to char*?
我写了一段同时使用c ++和Objective C的代码。
我需要将NSString*
转换为char*
. [str UTF8string]
不起作用,因为它返回const char*
.我知道:
-
std::string
->char*
:char* c = const_cast<char*>(pathStr.c_str());
-
NSString*
->std::string
: 链接
但它看起来太奇怪了,我仍然无法验证它。我可以用更好的方式转换它吗,例如,NSString*
-> const char*
-> char*
将其转换为字符*
(char*)[str UTF8String];
只要你不想编辑它...如果你这样做,那么把它串到一些字符数组中。
我想这只取决于你想用它做什么。
注意这一点:
返回的 C 字符串是指向字符串内结构的指针 对象,其生存期可能短于字符串对象,并且 肯定不会有更长的寿命。因此,您应该复制 C 字符串(如果需要存储在内存上下文之外) 你称之为这种方法。
如果计划修改字符串,或者计划长时间使用它,请对其执行相应的复制操作。 或者使用getCString:maxLength:encoding:
直接创建副本。
如果你不打算修改字符串,那么理论上没有必要强制转换为非常量(尽管许多接口确实在它们应该调用const char*
时调用char*
参数,所以有时你必须作弊)。
我的C++有点生疏,但你需要决定你的字符串是 ASCII 还是 Unicode,然后从那里开始。例如:
std::string foo = std::string( [str cStringUsingEncoding: NSASCIIStringEncoding] );
如果你想要一个 Unicode 字符串,你需要首先构造一个uint16_t null 终止数组,并将其传递给构造函数:
NSUInteger len = [str length];
uint16_t str = calloc(len+1, sizeof(uint16_t);
for(int i=0; i<len; ++i) {
str[i] = [str characterAtIndex:i];
}
std::u16string foo = std::u16string( str );
以上应该适用于大多数 Unicode 字符串,但是如果您的字符是真正的 32 位字符串,那么您需要使用类似于第二个示例的代码来使用"wstring"。
您最有可能遇到的是编译器警告,例如:
Initializing 'char *' with an expression of type 'const char *' discards qualifiers
编译器给出该特定警告,因为如果没有限定符 const,指针可能会被取消围栏,然后进行修改。这不仅仅是一个技术问题,实际上是一个应该谨慎对待的警告。
查看此其他答案以获取更多信息
- 如何解决"invalid conversion from 'char' to 'const char*'"
- Writing Char to Arduino EEPROM
- memcpy unsigned char to int
- 如何修复C++中的'cannot convert char to char*'错误?
- 返回"Cannot convert from 'std::ofstream {aka std::basic_ofstream<char>}' to bool"错误
- 使用strupr和strlwr时如何解决错误"invalid conversion of char to char*"?
- C++ cast char * to unsigned char
- Char to Int - C++
- Qt char* to QString
- 找不到错误"invalid conversion from char to const char*"的解决方案
- nameless char[] to std::string& reference
- atoi() - from char to int
- Unicode const char* to JString using JNI and C++
- 了解错误"error: cannot convert ‘char**’ to ‘const char*’ for argument ‘1’ to ‘double atof(const char*)’"
- const char* to LPCWSTR in Qt
- "incompatible types in assignment of 'char' to 'char'[100]"我使用的是 strcat 对吗?
- const char * to vector<unsigned char> Initalisation
- c++ const char* to char*
- 引起'Cannot convert from const char * to char *'
- char to char* issues