ios - iOS 应用程序中的 C 样式字符串被损坏

标签 ios objective-c c string

我正在构建一个 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/

相关文章:

ios - 如何使用字典 iOS 在服务器上发布图像?

c - 帮助开始分配特定位

C - 替代#ifdef

Iphone UI 案例研究 - 满意度远程

ios - 如何在 XCode8 编辑器中恢复按钮字体文本的颜色设置

ios - Unity3d 在 iPhone 上的表现

objective-c - 密集使用 GCD 的命名约定

iphone - 向下移动 UITabBarItem 图像?

c - 一元 & 运算符遇到 [] 时的行为

ios - @IBInspectable 与枚举?