我正在构建一个 iOS 应用程序,其中有许多带有 C 风格字符字符串的 CPP 文件。
我有一个文件定义为:
#define str1 "str1"
#define str2 "str2"
typedef struct {
const char *s;
int i;
} ArrayType;
ArrayType array[] = {
str1, 1,
str2, 2
};
运行应用程序时,我看到字符串 str1 和 str2 中的数据已损坏。然而,int 值 1 和 2 没问题。我想知道这是否与 Object-C 和 iOS 项目中字符串的处理方式有关?
我什至尝试将 .cpp 文件制作成 Objective-C++ 源代码并将代码更改如下:
#define str1 "str1"
#define str2 "str2"
typedef struct {
const char *s;
int i;
} ArrayType;
NSString *s1 = @str1;
NSString *s2 = @str2;
ArrayType array[] = {
s1, 1,
s2, 2
};
关于此行为的任何线索?
最佳答案
#define
总是会给出一个 NSString
。因此,在您的 C 代码中,您需要将 NSString
转换为 C 字符串,例如
#define str1 @"str1"
#define str2 @"str2"
typedef struct {
const char *s;
int i;
} ArrayType;
ArrayType array[] = {
[str1 cStringUsingEncoding: NSASCIIStringEncoding], 1,
[str2 cStringUsingEncoding: NSASCIIStringEncoding], 2
};
关于您的 Objective-C 代码,我在 NSString *s1 = @str1;
中发现了一个错误。它应该是 NSString *s1 = @"str1";
,我想你漏掉了引号 "
。
希望这对你有帮助......
关于ios - iOS 应用程序中的 C 样式字符串被损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30433632/