iOS应用程序中的C样式字符串已损坏

iOS应用程序中的C样式字符串已损坏,ios,objective-c,c,string,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很好。我想知道这

我正在构建一个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
};
现在关于你的目标C代码,我在
NSString*s1=@str1中发现了一个错误。它应该是
NSString*s1=@“str1”,我想你错过了引号


希望这能帮助您……

这应该如何工作?ArrayType特别将const char*作为s的类型。这将导致编译错误,因为initWithUTF8String将返回NSString对象。为什么
#define
会返回任何内容?
#define
是一个替换项,而
。。。“
将保持为C字符串。要使其成为一个
NSString
,您必须添加一个
@
@Sulthan:感谢您的指导,我编辑了我的答案。@NJGadhiya仍然没有真正意义。@NJGadhiya“#define将始终提供一个NSString”是一个完全错误的陈述。那你的答案就没有意义了。你是如何检查内容的?Objective-C只是C上的一层,在处理C字符串(字符数组)方面绝对没有区别。请添加正在检查
数组
内容的代码。这些字符串位于常量池中,因此不应被覆盖。我建议在写入
数组[0].s
时设置断点,并查看是什么改变了那里的字符串值。