簡體   English   中英

在C中使用char,指針問題,目標C

[英]Using char in C, pointer issue, objective C

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

我正在嘗試使用此方法將信息發送到我的服務器,但我不斷收到警告:

警告:傳遞'stringWithUTF8String:'的參數1會使指針從整數轉換而無需強制轉換

警告是針對此行的:ichar = [NSString stringWithUTF8String:chars1 [i]];

無論如何,我可以將chars1 [i]存儲到臨時char或字符串中,並在循環中用於發送嗎?

更新

我只是在尋找一種方法來解析NSString從開始字符到結尾,然后能夠使用它而不會收到以下警告:

使指針從整數開始而無需強制轉換

您不能一次解析UTF8一個字符(對應關系不是一對一的)。 正確的解決方案取決於您正在解析的協議,該協議應指定如何確定字符串開始和結束的時間。 按照協議將完成的字符串標識為原始字節數組, 然后將其解析為UTF8以將其轉換為字符串。

您不需要從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];

chars [i]的結果將是單個char,而不是字符串。 您不能將其傳遞到NSString stringWithUTFString:中,因為它需要一個以Nil結尾的C字符串,而不是單個字符。

您應該嘗試這樣的事情:

ichar = [NSString stringWithCharacters:&chars[i] length:1];

此錯誤很可能是由以下行引起的:

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

NSString:stringWithUTF8String:需要一個指向字符串的指針,並且您僅向其提供一個字符。

警告是告訴您在指針字段中傳遞了一個整數(單個char是整數)。 如果您嘗試運行此代碼,則結束效果會很差,因為它將嘗試讀取無效的內存。

UTF-8是一種多字節編碼格式; 您不能以這種方式對其進行迭代。 考慮將整個字符串放在NSString中,並使用Cocoa的API對其進行修改,最后在完成后將您希望與GNUTLS一起使用的字符串導出。

如果您知道您的字符串是UTF8,請使用– initWithUTF8String:創建NSString對象,然后如果需要獲取單個字符,請使用– characterAtIndex: – initWithUTF8String:

其他方法在這里:

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

也許這就是您想要的。

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

這將采用在chars1中以UTF-8編碼的字符串,並將每個單獨字符(本身可能是1或幾個字節)的UTF-8編碼發送到gnutls_record_send。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM