Objective c strcpy在较大尺寸上崩溃(iPhone使用rapidXML)
我正在iOS5上学习rapidxml的教程,不幸的是我的c有点生疏。以下代码适用于较小的字符大小,但在 EXC_BAD_ACCESS 我盲目地尝试了以下方法,但没有成功:Objective c strcpy在较大尺寸上崩溃(iPhone使用rapidXML),objective-c,ios5,rapidxml,Objective C,Ios5,Rapidxml,我正在iOS5上学习rapidxml的教程,不幸的是我的c有点生疏。以下代码适用于较小的字符大小,但在 EXC_BAD_ACCESS 我盲目地尝试了以下方法,但没有成功: NSString *xmlStringOrg = [[NSString alloc] initWithData:xmlData encoding:NSASCIIStringEncoding]; char xmlString[3600000]; strcpy(xmlString, [xmlStringOrg UTF8Str
NSString *xmlStringOrg = [[NSString alloc] initWithData:xmlData encoding:NSASCIIStringEncoding];
char xmlString[3600000];
strcpy(xmlString, [xmlStringOrg UTF8String]);
及
有什么想法吗?从很久以前我的c类开始,我觉得我需要把大于X的大小块分开处理,但我不确定从哪里开始
编辑1-工作 感谢@RichardJ.RossIII,以下作品:
# pragma mark - parser methods
-(void)parseIncomingFeed:(NSData *)xmlData:(NSString*)tag {
NSString *xmlStringOrg = [[NSString alloc] initWithData:xmlData encoding:NSASCIIStringEncoding];
NSLog(@"[xmlStringOrg length] = %-10d [xmlData length] = %d", [xmlStringOrg length],[xmlData length]);
char *xmlString = (char*) malloc([xmlStringOrg length]);
strcpy(xmlString, [xmlStringOrg UTF8String]); // no more tears
...
free(xmlString);
}
很明显你的缓冲区溢出了,如果你使用malloc和free会发生什么?谢谢@RichardJ.RossIII,就是这样。我改变了
char-xmlString[[xmlStringOrg-length]]代码>-->char*xmlString=(char*)malloc([xmlStringOrg-length])代码>和添加的免费(xmlString)代码>在我的方法末尾。很高兴你解决了这个问题!请在下面将解决方案作为答案发布,而不是对您的问题进行编辑。您将字节转换为NSString
对象只是为了将其转换回字节数组吗?Aconst char*xmlString=[xmlData字节]代码>应该足够了。很明显你的缓冲区溢出了,如果你使用malloc和free会发生什么?谢谢@RichardJ.RossIII,成功了。我改变了char-xmlString[[xmlStringOrg-length]]代码>-->char*xmlString=(char*)malloc([xmlStringOrg-length])代码>和添加的免费(xmlString)代码>在我的方法末尾。很高兴你解决了这个问题!请在下面将解决方案作为答案发布,而不是对您的问题进行编辑。您将字节转换为NSString
对象只是为了将其转换回字节数组吗?Aconst char*xmlString=[xmlData字节]代码>应该足够了。
NSString *xmlStringOrg = [[NSString alloc] initWithData:xmlData encoding:NSASCIIStringEncoding];
char xmlString[3600000];
strcpy(xmlString, [xmlStringOrg UTF8String]);
NSString *xmlStringOrg = [[NSString alloc] initWithData:xmlData encoding:NSASCIIStringEncoding];
char xmlString[[xmlStringOrg length]];
strncpy(xmlString, [xmlStringOrg UTF8String], [xmlStringOrg length]);
# pragma mark - parser methods
-(void)parseIncomingFeed:(NSData *)xmlData:(NSString*)tag {
NSString *xmlStringOrg = [[NSString alloc] initWithData:xmlData encoding:NSASCIIStringEncoding];
NSLog(@"[xmlStringOrg length] = %-10d [xmlData length] = %d", [xmlStringOrg length],[xmlData length]);
char *xmlString = (char*) malloc([xmlStringOrg length]);
strcpy(xmlString, [xmlStringOrg UTF8String]); // no more tears
...
free(xmlString);
}