Использование char в C, проблема указателя, цель C - PullRequest
1 голос
/ 21 октября 2011
for (int i=0; i < strlen(chars1); i++) {
    //*buf=chars1[i];
    NSLog(@"Received %c\n", chars1[i]);
    ichar = [ NSString stringWithUTF8String:chars1[i] ];
    NSLog(@"Received ", ichar);
    counter=strlen(chars1)-i;
gnutls_record_send (session, [ichar UTF8String] , counter); 
}

Я пытаюсь использовать этот метод для отправки информации на мой сервер, но я получаю предупреждение:

предупреждение: передача аргумента 1 из 'stringWithUTF8String:' делает указатель из целого числа без приведения

предупреждение для этой строки: ichar = [NSString stringWithUTF8String: chars1 [i]];

есть ли в любом случае я могу сохранить chars1 [i] во временном символе или строке и использовать егов моем цикле для отправки?

ОБНОВЛЕНО

Я просто ищу способ проанализировать строку NSString от начального символа до конца, а затем использовать ее, не получая этого предупреждения:

делает указатель из целого числа без приведения

Ответы [ 6 ]

1 голос
/ 21 октября 2011

Может быть, это то, что вы хотите.

NSString *unicodeString = [NSString stringWithUTF8String:chars1]; 
for (int i=0; i < [unicodeString length]; i++) {
    NSString *ichar = [unicodeString substringWithRange:NSMakeRange(i, 1)];
    NSLog(@"Received %@", ichar);
    counter=strlen(chars1)-i;
    gnutls_record_send (session, [ichar UTF8String] , counter); 
}

Это будет принимать строку, закодированную в UTF-8 в chars1, и отправлять кодировку UTF-8 каждого отдельного символа (который сам может быть 1 илинесколько байтов) до gnutls_record_send.

1 голос
/ 21 октября 2011

Если вы знаете, что ваша строка UTF8, создайте объект NSString, используя – initWithUTF8String:, затем используйте – characterAtIndex:, если вам нужно получить отдельные символы.

Другие методы здесь:

http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFStrings/Articles/AccessingContents.html

1 голос
/ 21 октября 2011

Эта ошибка, скорее всего, вызвана этой строкой:

ichar = [ NSString stringWithUTF8String:chars1[i] ];

NSString: stringWithUTF8String: требуется указатель на строку, и вы предоставляете ей только один символ.

Предупреждение говорит о том, что вы передали целое число (один символ - целое число) в поле указателя; если вы попытаетесь запустить этот код, он плохо закончится, так как попытается прочитать недействительную память.

UTF-8 - формат многобайтовой кодировки; Вы не можете повторить это таким образом. Подумайте о том, чтобы поместить всю строку в строку NSString и изменить ее, используя API-интерфейс Cocoa, и, наконец, экспортировать строку, которую вы хотите использовать с GNUTLS, когда закончите.

1 голос
/ 21 октября 2011

Результатом chars [i] будет один символ, а не строка.Вы не можете передать его в NSString stringWithUTFString: потому что он ожидает строку C с нулевым символом в конце, а не один символ.

Вместо этого вы должны попробовать что-то вроде этого:

ichar = [NSString stringWithCharacters:&chars[i] length:1];
1 голос
/ 21 октября 2011

Вам не нужно брать отдельный элемент из массива char и делать все это. В NSString есть метод класса,

+ (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc
cString

    A C array of bytes. The array must end with a NULL character; intermediate NULL characters are not allowed.

//Use this 
    NSString* tempString = [NSString stringWithCString:chars1 encoding:NSUTF8StringEncoding];
1 голос
/ 21 октября 2011

Вы не можете анализировать UTF8 по одному символу за раз (соответствие не однозначное). Правильное решение зависит от протокола, который вы анализируете, в котором должно быть указано, как определить, когда строка начинается и заканчивается. Следуйте протоколу, чтобы идентифицировать завершенную строку как необработанный массив байтов, и затем анализируют ее как UTF8, чтобы преобразовать ее в строку.

...