在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. iOS:無法將常量字符轉換爲NSString對象
- 4. 如何將常量字符*轉換爲常量無符號字符*
- 5. 如何將字符串變量轉換爲System.IO.FileStream對象?
- 6. 將NSMutableArray轉換爲字符串問題
- 7. Swift:將字符串轉換爲NSMutableArray
- 8. Ruby:將常量轉換爲字符串
- 9. 將COLORREF轉換爲常量字符
- 10. 如何將字符串對象轉換爲布爾對象?
- 11. 如何將對象字符串轉換爲對象Guid在C#
- 12. 轉換的Javascript對象字符串對象常量
- 13. 如何將字符串對象轉換爲字符串[]?
- 14. 如何在iOS中將NSMutableArray對象的NSString數據轉換爲小寫字母?
- 15. 如何在Ruby中將字符串轉換爲常量?
- 16. 如何在Python中將字符串轉換爲常量元組
- 17. 如何將字符串轉換爲對象作爲鍵值對?
- 18. 如何將對象轉換爲JavaScript中的字符串?
- 19. 如何將字符串轉換爲Java中的XML對象
- 20. 如何將字符串轉換爲JavaScript中的對象?
- 21. 如何將類對象轉換爲Unity3D中的JSon字符串?
- 22. 如何將IO對象轉換爲Ruby中的字符串?
- 23. 如何將對象轉換爲java中的字符串
- 24. 如何將事件對象轉換爲JavaScript中的字符串?
- 25. 如何將字符串轉換爲python中的datetime對象?
- 26. 如何將字符串轉換爲jquery中的xml對象
- 27. 如何將Json字符串轉換爲MVC4中的C#對象
- 28. 如何將JSON字符串轉換爲C中的對象#
- 29. 如何將數組對象轉換爲PowerShell中的字符串?
- 30. 如何將字符串轉換爲C#中的OracleClob對象?
在你的問題的標題中提到的NSMutableArray進來了嗎? – Abizern