我正在编写一个 Objective-C 程序来处理带有 XCODE 4.3.1 和 ARC 的生物分子的轨迹。我需要阅读 PDB 文件,即解析大量文本格式的数据。我对 NSString 的低效率感到非常失望,并试图编写一个 C 等效的 componentsSeparatedByString:。该算法适用于 NSString 和 NSMutableArrays,但我很难使用 char* 和 char**。
不幸的是,我收到了 EXC_BAD_ACCESS 错误。奇怪的是,我得到了 i=68103 和 j=68049 的错误(这些数字是否对您响起?),这意味着它在崩溃之前工作了一段时间。错误是“静态的”(总是以相同的 (i,j) 数字阻塞)。该数组似乎工作得很好(崩溃前的 NSLog 值)。
看起来,我对 C 代码和指针背后的微妙之处不是很有经验,但我肯定很高兴听到你的建议,让它工作!谢谢 !
继承人的代码:
+(char**) componentsSeparedByNewLineCEQUIV:(const char*)aChar:(int*)numWord
{ // char* aChar : my file, is typically 3 millions characters
int j=-1; //Last non space character
int i; //Scanned character
int len=strlen(aChar);
char** stringArray=malloc((*numWord)*sizeof(char*));
for (i=0;i<len; i++)
{ if (aChar[i]==10)
{
if ( j!=-1)
{
char* buffer2=malloc(i-j+1);
strcpy(buffer2, strndup(aChar+j, i-j));
stringArray[i]=malloc(sizeof(char)*strlen(buffer2)+1); //EXC_BAD_ACCESS HERE
strcpy(stringArray[i], buffer2);
}
j=-1;
}
else if (j==-1)
{j=i;}
}
if (j!=-1)
{ char* buffer2=malloc(i-j+1);
strcpy(buffer2, strndup(aChar+j, i-j));
stringArray[i]=malloc(strlen(buffer2)+1);
strcpy(stringArray[i], buffer2);
}
return stringArray;
}