2012-04-23 29 views
11

Tôi có biến const char * có thể có giá trị như "OpenStack: OpenStack1". Tôi muốn tokenize này const char * bằng cách sử dụng strtok nơi delimiter (mà là của một const char * loại) là ":". Nhưng vấn đề là strtok là loại sau đây: char * strtok (char * str, const char * delimiters);Làm thế nào để sử dụng Strtok cho tokenizing một const char *?

Điều đó có nghĩa là tôi không thể sử dụng const char * cho mục nhập đầu tiên vì nó phải là char *. Bạn có thể nói tôi làm thế nào tôi có thể chuyển đổi này const char * thành char *?

Cảm ơn bạn.

+1

Sao chép? http://linux.die.net/man/3/strdup –

+0

Ý của bạn là tôi nên sao chép từ trang đó? –

+0

Không, tôi có nghĩa là bạn nên sao chép chuỗi bằng chức năng được mô tả. –

Trả lời

12

Vì strtok thực sự ghi vào chuỗi của bạn, bạn cần tạo một bản sao có thể ghi được để mã hóa;

char* copy = strdup(myReadonlyString); 
...tokenize copy... 
free(copy); 
+0

Cảm ơn bạn đời, nó hoạt động. –

+3

Cách tạo bản sao C++ sẽ là bản sao 'std :: vector (myReadonlyString, myReadonlyString + strlen (myReadonlyString));'. Sau đó bạn có thể mã hóa 'copy-> data()'. Trình biên dịch sẽ tự động phân bổ bản sao bất cứ khi nào nó nằm ngoài phạm vi. – ManuelAtWork

0

Bạn có thể tạo một bản sao của chuỗi không thể sửa đổi và sau đó sử dụng strtok.

Bạn có thể sử dụng có thể sử dụng mallocstrcpy để sao chép chuỗi.

1

Khai báo nó như là một mảng:

char tokenedStr[] = "OpenStack:OpenStack1"; 

nếu không thể, sao chép nó vào một mảng char.

+0

Ya đó cũng là một cách tốt. –

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