У меня проблемы с присвоением значения NSString
char *
в структуре одноэлементного класса. Ниже приведено упрощение моей проблемы. Мой код использует больше полей в структуре и передает больше NSString
s.
Допустим, у меня есть одноэлементный класс "SingletonClass" со структурой (я сделал домашнюю работу с помощью документации Apple и правильно ее реализовал):
struct sampleStruct {
char *string1;
//other fields
} struct1;
с помощью этого метода, который устанавливает значение struct1.string1
для строки NSString, которая была передана:
- (void)initStructWithString:(NSString *)inputString {
//warning: assignment discards qualifiers from pointer target type
struct1.string1 = [inputString cStringUsingEncoding:NSUTF8StringEncoding];
}
и этот метод, который использует 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
}
Когда я звоню initStructWithString:(NSString *)inputString
из одного класса и пытаюсь вызвать useCharArray
из другого класса struct1.string1
- это куча мусора. Во время отладки я подтвердил, что каждый класс получает один и тот же экземпляр этого SingletonClass
.
Я все еще изучаю Objective-C, а также C, так что я знаю, что это может быть проблемой с управлением моей памятью. Я знаю, что [NSString cStringUsingEncoding]
должно быть присвоено const char *
, а не char *
, но я не знаю, как еще это сделать, поскольку поле в структуре - char *
. Я пробовал другие подходы в initSructWithString
, такие как присвоение новому const char *
результата [NSString cStringUsingEncoding]
и затем копирование его с strlcpy
на struct1.string1
. Этот подход имел тот же результат.
Как правильно хранить значение NSString
в char *
в структуре и как я могу гарантировать, что поля в этой структуре сохраняют свое значение, так как SingletonClass
используется различными классами?