Wie speichern Sie einen Wert von NSString als char-array innerhalb einer Struktur in Objective-C?
Ich habe Probleme bei der Zuweisung des Wertes eines NSString
zu einem char *
innerhalb einer Struktur von einer singleton-Klasse. Das folgende ist eine Vereinfachung meines Problems. Mein code nutzt weitere Felder in die Struktur und geht mehr NSString
s.
Sagen, ich habe eine singleton-Klasse "SingletonClass" mit einer Struktur (ich habe meine Hausaufgaben mit der Apple-Dokumentation und der Implementierung korrekt):
struct sampleStruct {
char *string1;
//other fields
} struct1;
mit dieser Methode setzt den Wert der struct1.string1
zu den NSString übergeben wurde:
- (void)initStructWithString:(NSString *)inputString {
//warning: assignment discards qualifiers from pointer target type
struct1.string1 = [inputString cStringUsingEncoding:NSUTF8StringEncoding];
}
und diese Methode, die verwendet 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
}
Wenn ich rufe initStructWithString:(NSString *)inputString
in eine Klasse und versuche zu nennen useCharArray
aus einer anderen Klasse struct1.string1
ist ein Haufen Müll. Beim Debuggen habe ich bestätigt, dass jede Klasse wird immer die gleiche Instanz dieser SingletonClass
.
Ich bin immer noch lernen, Objective-C sowie C auf dem Weg, so bin ich mir bewusst, es könnte ein problem mit meinem Speicher-management. Ich weiß, ich [NSString cStringUsingEncoding]
zugewiesen werden soll, eine const char *
und nicht ein char *
, aber ich weiß nicht, wie sonst, um darüber zu gehen, da das Feld in der Struktur ist ein char *
. Ich habe versucht, andere Ansätze innerhalb initSructWithString
wie das zuweisen einer neuen const char *
das Ergebnis [NSString cStringUsingEncoding]
und dann kopieren, die mit strlcpy
zu struct1.string1
. Diesen Ansatz hatte das gleiche Ergebnis.
Was ist die richtige Technik für die Speicherung des Werts einer NSString
im char *
innerhalb einer struct und wie kann ich sicherstellen, dass die Felder in dieser Struktur behalten Ihren Wert als die SingletonClass
verwendet wird, die durch verschiedene Klassen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Sache, erwähnenswert ist, dass die richtige Methode würde der name
cStringUsingEncoding:
; und der string verschwindet in etwa zur gleichen ZeitinputString
tut, also den resultierenden string kopiert werden müssen.Es könnte sich auch lohnen, erforschen die Verwendung von
UTF8String
statt (eine bequeme Methode, die das gleiche macht).Nicht kommentieren, und doch so schreiben hier (nach upping Sie die Antwort zur vorherigen Frage)... kam Gerade über diesen (ich merke, dass es ein paar Jahre später) und dachte so könnten Sie zum Beispiel anderen zu helfen, einige Maße:
Ich bin mit diesem erhalten die Spieler der name vom game center auf iOS, ich werde Probleme haben mit funky-Zeichen usw. aber meine schriftart nicht unterstützt, ist Sie trotzdem. ppName ist offensichtlich ein Zeiger auf einen Zeiger auf einen char, die an die Methode übergeben ich habe diesen code in der.
Wenn Sie brauchen, um zu speichern NSString in einen struct und dann von diesem struct bekommen einen NSString zurück (zum Beispiel, wenn Sie brauchen, zu senden, einen string an einen anderen Spieler in einem Game Center Multiplayer-Spiel), man könnte es so machen :