【问题标题】:nsstring and const char* conversionnsstring 和 const char* 转换
【发布时间】:2015-02-12 16:43:17
【问题描述】:

我尝试将 nsstring 转换为 const char*。

1- 我将一个 nsstring 和一个整数加在一起
2-然后我将这个新的 nsstring 转换为 const char*
3- 我有一个对象,我将这个新的 nsstring 作为我的对象的名称。
4- 我在另一个函数中使用这个对象

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

问题:A
1- 当我在函数中使用对象时,secondName 为空。
2- 但如果我用以下方式替换 firstName:firstName = "Name1";
3- 有效

问题 B
1- 如果我替换 const char* secondName = [firstName cString];
by const char* secondName = [macString UTF8String];
2- 即使我有 firstName = "Name1";
3-这不起作用!

有什么想法吗??

谢谢你

:=)

【问题讨论】:

    标签: iphone


    【解决方案1】:

    使用 NSString 类中的 cStringUsingEncoding:

    NSString *myString = @"Hello";
    const char *cString = [myString cStringUsingEncoding:NSASCIIStringEncoding];
    

    【讨论】:

    • 如果使用 NSASCIIStringEncoding 或类似的,请注意文档中的以下部分:如果接收器不能无损转换为编码,则返回 NULL
    【解决方案2】:

    const char* 是常量,无论如何都不能赋值!

    尝试将(const char*)[firstName UTF8String] 传递给您的方法

    【讨论】:

      【解决方案3】:
      NSString* firstName = [NSString stringWithFormat: @"Name%d", 1];
      
      const char* secondName = [firstName UTF8String];
      
      UTF8String returns a const char:   - (const char *)UTF8String
      

      【讨论】:

        【解决方案4】:

        使用这个方法:

        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]);
        

        【讨论】:

        • ...并且有内存泄漏。
        • 我总是想知道为什么人们会忘记 free() 或 delete[]。据我所知,ARC 不会为您执行此操作(免费或删除)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2012-02-24
        • 2021-03-21
        相关资源
        最近更新 更多