2012-02-08 55 views
7
int :: cadena calculatelenght(const cadena& a, const char* cad) 
{ 
    cadena c; 
    int lenght = 0; 
    char* punt; punt = cad; 
    while(*punt){ 
     lenght++; punt++; 
    } 
    return lenght; 
} 

tôi đã vấn đề này, tôi muốn để tính toán chiều dài của một chuỗi C mà không sử dụng các chức năng như strlen, trong các phương pháp khác của Cadena của tôi lớp tôi có thể vì không phải là const char *, nhưng bây giờ tôi không biết phải làm gì.chuyển đổi không hợp lệ từ 'const char *' thành 'char *' [-fpermissive]

+7

Bạn có lẽ không nên sử dụng '-fpermissive'. Nếu nó thường là một lỗi, bạn không nên biên dịch nó. –

+0

Tôi đang sử dụng các khối mã IDE và là chế độ biên dịch mặc định – freinn

+2

Có gì sai với 'strlen (punt)'? Hoặc 'std :: string' hoặc' std :: vector 'cho' c.pstr'? Rất nhiều các vòng lặp và các biến này trông giống như chúng sẽ biến mất với việc sử dụng đơn giản một số mẫu tiêu chuẩn. – dreamlax

Trả lời

9

Bạn có thể tuyên bố punt là có đúng loại:

const char * punt = cad; 
+0

+1 để khởi tạo cùng một lúc! – dreamlax

+0

Tại sao bạn (và tôi) làm điều này? bởi vì là một const ?? một con trỏ bình thường không thể khởi tạo cùng một lúc – freinn

+0

Chắc chắn nó có thể! Tại sao bạn nghĩ không? –

4

Bạn cần:

const char* punt; punt = cad; 
+0

Omg !! Tôi không nghĩ vậy, vậy tại sao chúng ta nói con trỏ này là "const" khi tôi di chuyển nó để tính toán chiều dài ?? : S: S – freinn

+4

@freinn bạn vẫn có thể di chuyển một con trỏ trỏ đến cái gì đó 'const',' const char * 'chỉ có nghĩa là bạn không thể sửa đổi _what con trỏ trỏ tới_. Nếu bạn muốn một con trỏ mà bạn không thể _move_ nhưng bạn có thể sửa đổi những gì nó trỏ đến, sau đó bạn làm 'char * const', và nếu bạn muốn một con trỏ mà cả hai bạn không thể di chuyển và bạn không thể sửa đổi những gì nó trỏ đến, bạn cần 'const char * const' –

+0

@freinn: Bạn không thể thay đổi giá trị của đối tượng mà nó trỏ vào, nhưng bạn có thể thay đổi vị trí của nó. – dreamlax

Các vấn đề liên quan