J'ai une variable de type char[]
et je veux copier la valeur NSString
dedans. Comment puis-je convertir un NSString
en un tableau de caractères (char array) ?
Il a demandé un tableau de caractères c'est un const char
J'ai une variable de type char[]
et je veux copier la valeur NSString
dedans. Comment puis-je convertir un NSString
en un tableau de caractères (char array) ?
Utilisez -[NSString UTF8String]
:
NSString *s = @"Some string";
const char *c = [s UTF8String];
Vous pouvez également utiliser -[NSString cStringUsingEncoding:]
si votre chaîne est encodée avec autre chose que UTF-8.
Une fois que vous avez le const char *
, vous pouvez travailler avec de manière similaire à un tableau de chars
:
printf("%c\n", c[5]);
Si vous souhaitez modifier la chaîne, faites une copie:
char *cpy = calloc([s length]+1, 1);
strncpy(cpy, c, [s length]);
// Faire quelque chose avec cpy
free(cpy);
Je recherche une réponse complète qui montre le code de NSString *someString
à char myArray[] =..
. J'ai vraiment besoin de cela, pourriez-vous s'il vous plaît mettre à jour votre réponse? Merci
@ Maxner: De quoi as-tu besoin de faire ? Dans la plupart des cas, un pointeur vers des caractères peut être utilisé comme un tableau de caractères.
La réponse de mipadi est la meilleure si vous voulez simplement un char*
contenant le contenu de la chaîne, cependant NSString fournit des méthodes pour obtenir les données dans un tampon que vous avez alloué vous-même. Par exemple, vous pouvez copier les caractères dans un tableau de unichar
en utilisant getCharacters:range:
comme ceci :
NSUInteger length = [str length];
unichar buffer[length];
[str getCharacters:buffer range:NSMakeRange(0, length)];
for (NSUInteger i = 0; i < length; i++)
{
doSomethingWithThis(buffer[i]);
}
Si vous devez utiliser char
, alors vous pouvez utiliser la méthode plus compliquée getBytes:maxLength:usedLength:encoding:options:range:remainingRange:
comme ceci (démontré dans la notation du sapin de Noël Polonais de l'Est) :
NSUInteger length = [str length];
NSUInteger bufferSize = 500;
char buffer[bufferSize] = {0};
[str getBytes:buffer
maxLength:(bufferSize - 1)
usedLength:NULL
encoding:NSUTF8StringEncoding
options:0
range:NSMakeRange(0, length)
remainingRange:NULL];
En Swift, un tableau de caractères est converti en UnsafePointer
. Accéder aux caractères fonctionne de la même manière en Swift pour un NSString
:
let str: NSString = "hello"
let charStr = str.UTF8String // UnsafePointer
Pour un objet String
en Swift, les choses sont un peu différentes:
let str = "hello"
let charStr = str.cStringUsingEncoding(NSUTF8StringEncoding)
charStr
est de type [CChar]?
où CChar
est un alias pour Int8
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.