mọi người có thể giải thích cho em tại sao trong 2 cách khai báo chuỗi như thế này thì kết quả show ra lại khác nhau như vậy
đoạn code thứ nhất
Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char str[20];
char *ptr1,*ptr2;
printf("nhap chuoi :");
scanf("%s",str);
ptr1 = strtok(str," :");
ptr2 = strtok(NULL," :");
printf("chuoi thu nhat %s",ptr1);
printf("chuoi thu hai %s",ptr2);
getch();
return 0;
}
đoạn code thứ 2
Code:
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
char str[] = "demo : baitap";
char *ptr1,*ptr2;
ptr1 = strtok(str," :");
ptr2 = strtok(NULL," :");
printf("chuoi thu nhat %s",ptr1);
printf("chuoi thu hai %s",ptr2);
getch();
return 0;
}
giả sử trong đoạn code 1 ta nhập đầu vào cũng là demo : baitap
khi thực hiện chạy 2 đoạn code này thì đoạn code thứ nhất hiển thị kết quả là demo và null, với đoạn code thứ 2 thì hiển thị ra đúng kết quả mong đợi là demo và baitap
em không chắc lắm về phỏng đoán của mình nhưng theo em nghĩ thì có lẽ cuối chuỗi nhập vào trong đoạn code thứ nhất có cái gì đó không ổn (có thể là chứ một kí tự lạ nào đó nhưng cũng không phải bởi vì em đã đếm số kí tự và thiết lập số phần tử bằng đúng với chiều dài của chuỗi, cũng có thể là không có \0 nhưng theo lý thuyết thì một chuỗi luôn có \0 đằng sau để đánh dấu kết thúc chuỗi)