18

i try to convert nsstring to const char*.

1- i add a nsstring and an integer together
2- then i convert this new nsstring to const char*
3- i have an object and i attribute this new nsstring as my object's name.
4- i use this object in another function

NSString* firstName = [NSString stringWithFormat: @"Name%d", 1];
const char* secondName = [firstName cString];
myobject->setName(secondName);

problem : A
1- secondName is null when i use my object in my function.
2- but if i replace firstName by : firstName = "Name1";
3- it works

problem B
1- if i replace const char* secondName = [firstName cString];
by const char* secondName = [macString UTF8String];
2- even if i have firstName = "Name1";
3- this is not working !!

any idea ??

thank you

:=)

user472171
  • 191
  • 1
  • 1
  • 3

4 Answers4

66

Use cStringUsingEncoding from the NSString class:

NSString *myString = @"Hello";
const char *cString = [myString cStringUsingEncoding:NSASCIIStringEncoding];
Mike Burba
  • 1,025
  • 8
  • 17
  • 5
    Pay attention to the following part in documentation if using NSASCIIStringEncoding or similar: _Returns NULL if the receiver cannot be losslessly converted to encoding_ – V1ru8 May 02 '13 at 14:46
16

const char* are constant, you can't assign them in anyway !

Try passing (const char*)[firstName UTF8String] to your method

VdesmedT
  • 9,037
  • 3
  • 34
  • 50
9
NSString* firstName = [NSString stringWithFormat: @"Name%d", 1];

const char* secondName = [firstName UTF8String];

UTF8String returns a const char:   - (const char *)UTF8String
Rashad
  • 11,057
  • 4
  • 45
  • 73
ryatkins
  • 246
  • 3
  • 12
0

Use this method:

char* MakeStringCopy (const char* string)
{
    if (string == NULL)
        return NULL;

    char* res = (char*)malloc(strlen(string) + 1);
    strcpy(res, string);
    return res;
}

NSString *filePath = @"~/Documents/Image.png";
MakeStringCopy([filePath UTF8String]);
Dee
  • 1,887
  • 19
  • 47