30/09/2018, 16:17
Hàm thao tác trên chuỗi
#include <string.h>
#include <stdio.h>
#include <conio.h>
int main()
{
char *s = "They are dogs, cats. The dogs"; char *sep = " ,.";
char *word = strtok(s, sep);
while (word != NULL){
printf("%s
", word);
word = strtok(NULL, sep);
}
getch();
return 0;
}
Em có đoạn code này, kết quả sau khi chạy sẽ là They, are, dogs,… tách từng từ ra. Em chưa hiểu lắm nên định debug thử, nhưng chạy trên C-Free thì Console nó bị stopped working, còn chạy trên VS2013 thì bị lỗi _CRT__NO__WARNINGS.
Ai cho em hỏi chỗ vòng lặp while tại sao ban đầu mình đưa tham số vào là chuỗi s nhưng sau lại đưa vào NULL.
Bài liên quan
“!= NULL” mà =))
lỗi kia thì vào thử project properties -> linker -> chỗ “enable incremental linking” chọn NO
Không phải. Trong vòng lặp kìa
có gì đó hơi lạ ở đây @@
hàm tok tìm blankspace gán cho sep, sau đó lấy thằng NULL gán cho thằng blankspace sau sep, => lần lặp sau nó sẽ dùng thằng NULL như thằng tok =))) hiểu nhưng giải thích chắc không ai hiểu
thế mới chuẩn, xem con trỏ hằng và hằng con trỏ để biết thêm chi tiết
Về câu hỏi thứ 2 của bạn tại sao lại
word = strtok(NULL, sep);
thì nên xem lại cách dùng strtok cho chính xác, mình nói nôm na thế này thôi.strtok với lời gọi đầu tiên
char *word = strtok(s, sep);
sẽ gán cácsep
tìm thấy được thành'\0'
và word sẽ trỏ tới vị trí đầu tiên của s.với lời gọi thứ 2 trở đi thì mình sẽ không truyền một chuỗi nào khác vào và word sẽ di chuyển từ vị trí cũ lên cho tới khi gặp vị trí sau cái
'/0'
(do đó chuyềnNULL
vào) => nó là thế