iOS应用程序中的C样式字符串已损坏
我正在构建一个iOS应用程序,其中有许多带有C样式字符字符串的CPP文件 我有一个文件定义为: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很好。我想知道这
#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
时设置断点,并查看是什么改变了那里的字符串值。