在xcode中开发计算器我使用c类将中缀转换为后缀表达式及其评估。但我在我的视图控制器类中有一个NSString,我需要将这个NSString传递给转换和评估发生的C类。我怎样才能做到这一点?如何将NSMutableArray对象转换为xcode中的常量字符
回答
假设你完成已含有NSString
对象的NSMutableArray
,并且希望将其转换为C数组含有C字符串时,需要分配内存的适当大小的char *
C数组(例如,如果你想为数组设置一个NULL
终止符,则可以计算NSMutableArray
+也许是1个额外值,否则你需要随处传递数组的元素数)。然后对于NSMutableArray
的每个元素,使用由NSString
对象的UTF8String
返回的C字符串填充C数组中的对应索引。
注意,C字符串由UTF8String
返回的“自动释放”,所以如果你需要让他们周围比目前的自动释放背景下时间越长,你需要复制它们(如strdup
),然后free
他们(和C阵列,在任何情况下都需要free
)。
例如:
#include <Foundation/Foundation.h>
#include <stdio.h>
#include <string.h>
void printCStringsInArray(const char **arr) {
int i = 0;
while (*arr) { printf("%d: %s\n", i++, *arr++); }
}
int main() {
const char **carr;
@autoreleasepool {
NSMutableArray *arr;
const char **p;
arr = [NSMutableArray arrayWithObjects:@"11", @"+", @"12", nil];
p = carr = malloc(sizeof(*carr) * ([arr count] + 1));
for (NSString *s in arr) {
*p++ = strdup([s UTF8String]);
}
*p = NULL; // mark the end of carr
}
printCStringsInArray(carr);
{ // free the C strings and array
const char **p = carr;
while (*p) { free(*p++); };
free(carr);
}
return 0;
}
此打印:
0: 11
1: +
2: 12
编辑:当然,如果你只是想调用一些C函数从否则Objective-C的以个体的字符串作为const char *
代码,你不需要做任何复杂的事情,只需要用UTF8String
即时转换每个字符串,并使用NSMutableArray
进行迭代等等。但是后来人们可能会怀疑wh在那里你可以用C字符串做,你不能直接使用NSString
s。
(检查错误,为简洁起见。) – Arkku
这很简单,因为您可以使用NSString的UTF8String方法,但是您必须处理内存分配:分配一个块以包含字符串。选择是否将其包装到NSData中,以便在出池时自动释放它块,或者如果要手动释放它:
@autoreleasepool
{
NSArray* strings= @[ @"Hello", @"Hey" ]; // Your strings
// This could be also a NSMutableArray if you need it
NSMutableArray* cstrings=[NSMutableArray new]; // C strings
for(NSString* string in strings) // Iterate over all the strings
{
const char* temp=[string UTF8String]; // Get C string
const unsigned long length=strlen(temp); // Allocate memory for it
char* string=(char*)malloc((length+1)*sizeof(char));
strcpy(string,temp); // Copy it
// Store it inside NSData
[cstrings addObject: [NSData dataWithBytesNoCopy: string length: (length+1)*sizeof(char)]];
}
}
- 1. 如何将字符转换为对象
- 2. 如何在VB中将对象转换为字符串变量?
- 3. 如何将常量字符*转换为常量无符号字符*
- 4. 如何将字符串变量转换为System.IO.FileStream对象?
- 5. Swift:将字符串转换为NSMutableArray
- 6. 将NSMutableArray转换为字符串问题
- 7. 将COLORREF转换为常量字符
- 8. Ruby:将常量转换为字符串
- 9. 如何将字符串对象转换为布尔对象?
- 10. 如何将对象字符串转换为对象Guid在C#
- 11. 转换的Javascript对象字符串对象常量
- 12. 如何在iOS中将NSMutableArray对象的NSString数据转换为小写字母?
- 13. 如何在Ruby中将字符串转换为常量?
- 14. 如何在Python中将字符串转换为常量元组
- 15. 如何将对象转换为JavaScript中的字符串?
- 16. 如何将对象转换为java中的字符串
- 17. 如何“将”dequed对象“转换”为Python中的字符串?
- 18. 如何将类对象转换为Unity3D中的JSon字符串?
- 19. 如何将Json字符串转换为MVC4中的C#对象
- 20. 如何将IO对象转换为Ruby中的字符串?
- 21. 如何将字符串转换为JavaScript中的XML对象?
- 22. 如何将json对象转换为android ..中的字符串?
- 23. 如何将JSON字符串转换为C中的对象#
- 24. 如何将数组对象转换为PowerShell中的字符串?
- 25. 如何将字符串转换为Java中的XML对象
- 26. 如何将字符串转换为Java中的文件对象?
- 27. 如何将字符串转换为jquery中的xml对象
- 28. 如何将字符串转换为python中的datetime对象?
- 29. 如何将字符串转换为VBScript中的对象?
- 30. 如何将对象转换为Spark中的字符串?
在你的问题的标题中提到的NSMutableArray进来了吗? – Abizern