2014-11-26 4 views
-5

Я уверен, что делаю глупую ошибку, но мне трудно объявить строку C в одном из моих файлов .m. Я продолжаю получать ошибку, которая говорит только «Ожидаемый идентификатор». Вот что я пытаюсь сделать.Проблема с созданием строки C в Xcode

@interface myClass() { 
    const char myText[6]; 
} 
@end 

@implementation 
-(instancetype) init 
{ 
    myText = ['M', 'y', ' ', 'T', 'e', 'x', 't']; 
} 
@end 

И я продолжаю получать эту ошибку, когда пытаюсь построить. C явно не мой сильный костюм. Я попытался взять 6 из скобок. Я попытался собрать все скобки. Я попытался сделать myText указателем. Я попробовал кучу вариантов. Любая идея, что я делаю неправильно?

+1

Это очень сложный вопрос: ** Какая строка ** идентифицируется при получении сообщения об ошибке? –

+0

Пожалуйста, прочтите строку tag-wiki: https://stackoverflow.com/tags/string/info (и воздержитесь от отметки цели-c c) – Deduplicator

+0

Даже после того, как вы исправите эту проблему, есть так много ошибок в этом коде, который вы выиграли 'получить его для компиляции. Это компьютерный язык. Вы должны соблюдать правила; вы не можете просто написать что угодно. – matt

ответ

0

Возможно, вы захотите прочитать Objective-C Programming Guide.

Если вы хотите получить const char *, вы можете получить его у объекта NSString.

- (id)init { 
    if (self = [super init]) { 
     myText = [@"myText" UTF8String]; 
    } 
    return self; 
} 

Следует также отметить, что ваш интерфейс не будет компилироваться, как он в настоящее время стоит. Попробуйте следующее:

@interface myClass : NSObject { 
    const char *myText; 
} 
@end 

Обычные старые типы данных обычно не используются в Objective-C. Лучший интерфейс будет использовать NSString и свойства, в то время как класс разделяет пространства имен с использованием префикса три письма:

@interface ABCMyClass : NSObject 
@property (nonatomic, copy) NSString *myText; 
@end 

@implementation ABCMyClass 

- (id)init { 
    if (self = [super init]) { 
     _myText = @"myText"; 
    } 
    return self; 
} 

@end 
0

Вы должны поделиться тем, что вы пытаетесь сделать, так как, как правило, лучше, чем модели массивов C char.

Но если вы намерены использовать массивы символов (и в этом случае не завершена), у меня есть пара наблюдений с вашей первоначальной попытки.

  1. Вы определили буфер из шести символов, но на самом деле имеете семь символов.

  2. Вы определили буфер const, что означает, что вы теоретически не можете его обновить. Если вы хотите, чтобы определить буфер, который вы будете обновлять на более позднем этапе, удалите const:

    char text[7]; 
    

    Тогда вы можете заполнить этот массив char:

    text[0] = 'M'; 
    text[1] = 'M'; 
    text[2] = ' '; 
    text[3] = 't'; 
    text[4] = 'e'; 
    text[5] = 'x'; 
    text[6] = 't'; 
    
  3. я не уверен, если вам нужен неограниченный массив символов или нет. Если вы хотите использовать этот массив символов как строку C, вам также нужно будет добавить '\0' (что составляет восемь символов, BTW).

  4. При указании массива символов вы должны использовать фигурные скобки, а не квадратные фигурные скобки.Например, если это локальная переменная (которая, потому что местные мы можем использовать const), вы можете сделать:

    const char text[] = {'M', 'y', ' ', 'T', 'e', 'x', 't'}; 
    

    или

    const char text[] = {'M', 'y', ' ', 'T', 'e', 'x', 't', `\0`}; 
    
  5. Если вы хотите выйти замуж за предопределенный массив char с синтаксисом {...}, вы должны использовать memcpy (или если \0 завершено, strcpy).

Но опять же, если вы делаете это в Objective-C, есть всегда лучше, чем конструкции с использованием массива char. Итак, я бы предложил отступить от деталей массива C char и описать, какую более широкую проблему вы пытаетесь решить. Там могут быть гораздо лучшие, более современные решения.

Смежные вопросы