I am having trouble assigning the value of an NSString
to a char *
within a structure of a singleton class. The following is a simplification of my problem. My code utilizes more fields in the structure and passes more NSString
s.
Say I have a singleton class "SingletonClass" with a structure (I've done my homework with the Apple Documentation and implemented it correctly):
struct sampleStruct {
char *string1;
//other fields
} struct1;
with this method that sets the value of struct1.string1
to the NSString that was passed:
- (void)initStructWithString:(NSString *)inputString {
//warning: assignment discards qualifiers from pointer target type
struct1.string1 = [inputString cStringUsingEncoding:NSUTF8StringEncoding];
}
and this method that uses struct1.string1
:
- (void)useCharArray {
//I would obviously be doing something more complex in reality
printf("This is the char array: %s", struct1.string1);
//doesn't print the value I assigned to it, but garbage
}
When I call initStructWithString:(NSString *)inputString
from one class and try to call useCharArray
from another class struct1.string1
is a bunch of garbage. During debugging I've confirmed that each class is getting the same instance of this SingletonClass
.
I'm still learning Objective-C as well as C along the way, so I'm aware it could be a problem with my memory management. I know I [NSString cStringUsingEncoding]
should be assigned to a const char *
and not a char *
, but I don't know how else to go about it since the field in the structure is a char *
. I've tried other approaches within initSructWithString
such as assigning a new const char *
the result of [NSString cStringUsingEncoding]
and then copying that with strlcpy
to struct1.string1
. That approach had the same result.
What is the correct technique for storing the value of an NSString
in a char *
within a struct and how can I ensure that the fields within this struct retain their value as the SingletonClass
is used by different classes?