I want to show the char * in the UITextField
What I tried:
char *data; char *name=data+6; txtName.text=[[NSString alloc] initWithCString:name encoding:NSUTF8StringEncoding]; but I am not getting the correct value.
To create an NSString from a const char *, simply use these methods:
autoreleased object:/** * Should be wrapped in `@autoreleasepool {...}`, * somewhere not far in call-stack * (as closer it's, the lower our memory usage). */ NSString *stringFromChar(const char *input) { return [NSString stringWithUTF8String: input]; } Whenever we
returnan object (maybe toSwift), we need to register into nearest@autoreleasepoolblock (by callingautoreleasemethod to prevent memory-leak, according to ownership-rules), butARCdoes that automatically for us.
But even with ARC disabled, we are NOT forced to call autorelease manually, like:
return [[NSString stringWithUTF8String: name] autorelease]; Generally, convenience factory methods (like
stringWithUTF8String:), already call theautoreleasemethod (or should ifARCdisabled), because the class simply does not intend to own the instance.
retained object:NSString *result = [[NSString alloc] initWithUTF8String: name]; // ... Do something with resulted object. // NOTE: calling below is not required // (If ARC enabled, and should cause compile error). [result release]; Update 2021 about difference; With
ARCenabled, these two methods are equivalent (i.e.ARCwill auto-callautoreleasemethod; always registering to nearest@autoreleasepool).
Reference.
If you are not getting the correct value, then something is wrong with the data. Add a few NSLog calls to see what the strings contain.
What do you expect? You have an uninitalized char*. Then you add 6 to the pointer, which is already undefined behaviour. Then you try to turn a pointer pointing to any old rubbish (and you have no idea where it is pointing) to an NSString*. Nothing good can come from this.
Define a char* pointing to an actual, real C string using ASCII or UTF-8 encoding. Then create an NSString like this:
char* cstring = "Try harder"; NSString* objcstring = @(cstring);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With