2009-02-26 35 views
7

tôi muốn đúc NSString của tôi đến một char liên tục mã được hiển thị dưới đây:đúc một NSString để char vấn đề

NSString *date = @"12/9/2009"; 
char datechar = [date UTF8String] 

NSLog(@"%@",datechar); 

tuy nhiên nó trả lại cảnh báo phân công làm cho số nguyên từ con trỏ mà không có một dàn diễn viên và không thể in char đúng, ai đó có thể cho tôi biết vấn đề là gì

Trả lời

27

Hãy thử một cái gì đó như thế này:

NSString* date = @"12/9/2009"; 
char* datechar = [date UTF8String]; 
NSLog(@"%s", datechar); 

Bạn cần phải sử dụng char * thay vì char, và bạn phải in chuỗi C sử dụng% s không phải% @ (% @ chỉ dành cho mục tiêu-c loại id).

+5

UTF8String trả về một const char * –

1

tôi sẽ thêm một * giữa char và datechar (và một% s thay vì một @%):

NSString *[email protected]"12/9/2009"; char * datechar=[date UTF8String]; 
NSLog(@"%s",datechar); 
6

Tôi nghĩ rằng bạn muốn sử dụng:

const char *datechar = [date UTF8String]; 

(lưu ý * trong đó)

+1

này nên là câu trả lời – Adamski

2

Mã của bạn có 2 vấn đề:

1) "char datechar ..." là một một ký tự đơn, chỉ chứa một char/byte và sẽ không giữ toàn bộ mảng mà bạn đang tạo ra từ đối tượng ngày/chuỗi của bạn. Do đó, dòng của bạn phải có (*) ở phía trước của biến để lưu trữ nhiều ký tự thay vì chỉ một ký tự.

2) Sau khi sửa lỗi ở trên, bạn vẫn sẽ nhận được cảnh báo về (char *) vs (const char *), do đó, bạn sẽ cần phải "truyền" vì chúng là kết quả tương tự về mặt kỹ thuật. Thay đổi dòng:

char datechar = [date UTF8String];

vào

char *datechar = (char *)[date UTF8String];

Thông báo (char *) sau dấu =, nói với trình biên dịch rằng biểu thức sẽ trả về một (char *) như trái ngược với nó là mặc định (const char *).

Tôi biết bạn đã đánh dấu câu trả lời trước đó, tôi nghĩ tôi có thể đóng góp để giải thích các vấn đề và cách khắc phục chi tiết hơn.

Tôi hy vọng điều này sẽ hữu ích.

Kind Regards Heider

0

Tôi đã đau khổ trong một thời gian dài để chuyển đổi NSString để char để sử dụng cho chức năng này

-(void)gpSendDTMF:(char) digit callID: (int)cid; 

Tôi đã thử tất cả các câu trả lời của câu hỏi này/nhiều điều từ tìm kiếm Google nhưng nó không hiệu quả với tôi.

Cuối cùng tôi đã nhận được giải pháp.


Giải pháp:

NSString *digit = @"5"; 

char dtmf; 

char buf[2]; 

sprintf(buf, "%d", [digit integerValue]); 

dtmf = buf[0]; 
Các vấn đề liên quan