싱글 톤 구조의 구조 내에서 NSString
의 값을 char *
에 할당하는 데 문제가 있습니다. 다음은 내 문제를 단순화 한 것입니다. 내 코드는 구조에서 더 많은 필드를 사용하고 NSString
을 전달합니다. 에 struct1.string1
의 값을 설정이 방법Objective-C의 구조 내에 NSString의 값을 char 배열로 저장하는 방법은 무엇입니까?
struct sampleStruct {
char *string1;
//other fields
} struct1;
:
내가 싱글 구조와 클래스 "SingletonClass"(내가 애플 문서 내 숙제를하고 올바르게 구현 한)을 말해봐- (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
}
,536 :
struct1.string1
사용
- (void)initStructWithString:(NSString *)inputString {
//warning: assignment discards qualifiers from pointer target type
struct1.string1 = [inputString cStringUsingEncoding:NSUTF8StringEncoding];
}
이있어서 통과 하였다는 NSString
한 클래스에서 initStructWithString:(NSString *)inputString
으로 전화를 걸어 다른 클래스에서 useCharArray
에 전화하면 struct1.string1
은 많은 양의 쓰레기입니다. 디버깅하는 동안 각 클래스가이 SingletonClass
의 동일한 인스턴스를 가져 오는 것을 확인했습니다.
나는 여전히 Objective-C와 C를 배우면서 메모리 관리에 문제가 있다는 것을 알고 있습니다. 나는 [NSString cStringUsingEncoding]
이 const char *
이 아니라 char *
으로 할당되어야한다는 것을 알고 있습니다. 그러나 구조의 필드가 char *
이기 때문에 그것에 대해 어떻게 해야할지 모르겠습니다. 나는 initSructWithString
내에서 [NSString cStringUsingEncoding]
의 결과를 새롭게 할당하고 그 다음에 strlcpy
을 struct1.string1
으로 복사하는 것과 같은 다른 접근법을 시도했다. 그 접근 방식은 같은 결과를 가져왔다.
구조체 내의 char *
에서 NSString
의 값을 저장하고, I는 SingletonClass
다른 클래스에서 사용되는이 구조체 내의 필드들의 값을 유지하는 것을 어떻게 보장 할 수에 대한 정확한 기술은 무엇인가?
고마워요.그래서 복사 할 때, strlcpy와 같은 것이 사라질 문자열에 대한 포인터를 복사 할 것이므로 memcpy를 사용하고 있는가? –
memcpy를 사용하는 것은 항상 좋은 생각입니다. 복사하기 전에 대상 버퍼를 할당해야합니다. 문자열을 복사하기 위해 실제로 malloced 메모리를 가지고 있습니다. –