I’m writing an objective-C program to deal with trajectories of Biomolecules with XCODE 4.3.1 and ARC. I need to read PDB files, i.e. parse large quantities of text formatted data. I’m very disappointed by NSString inefficiency and was trying to write a C-equivalent of componentsSeparatedByString:. The algorithm works just fine with NSString and NSMutableArrays, but i’m having a hard time using char* and char**.
Unfortunately, I’m getting an EXC_BAD_ACCESS error. The strange thing is that i get the error for i=68103 and j=68049 (does these number ring a bell for you ?), which means it worked for some time before crashing. The error is “static” (always block at the same (i,j) numbers). The array seems to work just fine(NSLog on its values before crash).
As it seems, I’m not very experienced with C-code and the subtlety behind pointers, but I would definitely be glad to hear your suggestions to make it work ! Thanks !
Heres the code :
+(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;
}
Update for everyone who might be interested : this is a working version, using strtok which can be useful, although i’m still interested in response on my code.
This code have been tested 5 times faster (125ms vs 581ms) than [astring componentsSeparatedByString:@”\n”] …