Thắc Mắc Về Khai Báo Chuỗi Trong C - Programming - Dạy Nhau Học Trang chủ » Khai Báo Chuỗi Trong C » Thắc Mắc Về Khai Báo Chuỗi Trong C - Programming - Dạy Nhau Học Có thể bạn quan tâm Khai Báo Chuỗi Trong Python Khai Báo Chương Trình Khai Báo Cin Trong C++ Khai Báo Class Trong C++ Khai Báo Class Trong Python Thắc mắc về khai báo chuỗi trong C programming c htwap (lu___va_sa__) March 2, 2015, 3:11am #1 e có chương trình sau: #include <stdio.h> #include <conio.h> #include <string.h> int main(){ char s[255], s1[255]; printf("Nhap xau s: "); do{ gets(s); } while(strlen(s)==0); printf("Xau s ban vua nhap la: %s\n",s); int n=strlen(s); printf("Xau \"%s\" co do dai la: %d\n",s,n); char str[n-1]; for(int i=0;i<n;i++) str[i]=s[n-i-1]; printf("Xau dao nguoc cua xau \"%s\" la: \"%s\"\n",s,str); getch(); return 0; } chỗ char str[n-1]; nếu e để là char str[n]; thì chuỗi in ra toàn có kí tự lạ thừa ở cuối, e không hiểu tại sao, mong ai đó giải thích cho e với ạ. em cảm ơn 2 Likes mrmike612 (minh tran) October 9, 2018, 1:55am #2 khi tạo chuỗi bao giờ C cũng tự tạo ra ký tự kết thúc để báo chuỗi đã kết thúc, ký tự đó là “\0” hay là NULL. Bạn ko muốn in ký tự đó thì phải đặt là str[n-1]. 3 Likes htwap (lu___va_sa__) November 4, 2014, 12:42pm #3 thế hàm strlen có tính luôn kí tự kết thúc chuỗi không ạ? 1 Like 14520054 (BaoLe) November 4, 2014, 12:49pm #4 không đâu pạn.nội dung hàm strlen là: int main() { int i=0; while(c[i]) i++; return i; } Giá trị của i chính là độ dài của chuỗi đang xét tới. 3 Likes ltd (Lê Trần Đạt) November 4, 2014, 12:48pm #5 strlen không tính ký tự kết thúc chuỗi đâu. Code của @14520054 thể hiện đúng ý tưởng của strlen rồi đấy. 1 Like htwap (lu___va_sa__) November 4, 2014, 1:00pm #6 tức là nếu xâu s là “abc” thì n sẽ là 3 đúng ko ạ. e lại khai báo char s1[n] thì khi đó sẽ thành s1[3] vậy khi đảo xâu thì 3 chỗ của s1 bị giá trị của s ghi vào rồi, vậy sao nó thêm đc kí tự kết thúc ạ? 2 Likes ltd (Lê Trần Đạt) November 4, 2014, 12:54pm #7 htwap: tức là nếu xâu s là “abc” thì n sẽ là 3 đúng ko ạ. Nếu n là strlen thì n = 3. Nếu n là size của s1 thì sai. để khai báo s1[n] = "abc" thì n phải bằng 4. 3 Likes htwap (lu___va_sa__) November 4, 2014, 12:55pm #8 thế lúc khai báo s1 để lưu giá trị đảo xâu s thì phải khai báo là char s1[n+1] ạ? 1 Like ltd (Lê Trần Đạt) November 4, 2014, 12:59pm #9 htwap: thế lúc khai báo s1 để lưu giá trị đảo xâu s thì phải khai báo là char s1[n+1] ạ? Luôn luôn phải khai báo char s1[n+1]. Không quan trọng là có đảo sâu hay không. Vì chuỗi là một mảng các ký tự và kết thúc bằng ‘\0’. Trong các video của anh có nói rất kỹ về cái này. 2 Likes htwap (lu___va_sa__) November 4, 2014, 1:11pm #11 tức là nó luôn lấy kí tự cuối cùng làm kí tự kết thúc chuỗi nên nếu khai báo char s1[n] thì s[n-1] sẽ luôn là “\0” phải không ạ? 2 Likes ltd (Lê Trần Đạt) November 4, 2014, 1:35pm #12 Chính xác rồi Sáng Cứ làm thêm nhiều ví dụ là hiểu ngay ấy mà. Hoặc xem mấy video về chuỗi của anh để hiểu rõ hơn. Mục lục các bài học và bài viết hay programming 2 Likes htwap (lu___va_sa__) November 4, 2014, 1:40pm #13 à, a làm thêm video vè con trỏ và chuỗi đi a. 2 Likes ltd (Lê Trần Đạt) November 4, 2014, 1:41pm #14 Trong đó có quá chừng video về con trỏ, em xem đỡ phần C++ nói cực kỳ kỹ lưỡng về con trỏ. Về chuỗi, thì C và C++ đều có, em search title sẽ thấy nhé. 2 Likes htwap (lu___va_sa__) November 4, 2014, 1:44pm #15 e thấy mỗi con trỏ và mảng thôi, chưa thấy con trỏ và chuỗi, 2 ngày qua e ngồi search 1 đống tài liệu và cũng tạm hiểu rồi ạ, mà e thấy ng ta bảo khi cấp phát động nên dùng hàm new chứ ko nên dùng malloc. e ko hiểu lắm 1 Like ltd (Lê Trần Đạt) November 4, 2014, 1:45pm #16 new là hàm của C++. malloc là hàm của c. Nếu em code C++, hãy dùng new. Nếu code C hãy dùng malloc hoặc calloc. 2 Likes mrmike612 (minh tran) November 4, 2014, 1:45pm #17 anh cho em hỏi, tự dưng trả lời cho bạn này xong em nãy sinh ra vấn đề là: Ví dụ như strlen của abc trả ra 3, mà array index thì bắt đầu từ 0 nên => str[3] là đã đủ chứa cả a,b,c với null character rồi. vậy tại sao phải str[n+1] vậy anh ??? 3 Likes ltd (Lê Trần Đạt) November 4, 2014, 1:47pm #18 Cái này là em nhầm lẫn kiến thức rồi. Index khác với size. Index bắt đầu từ 0. Thế nên str[3] có nghĩa là ta có str[0], str[1], str[2]. Chấm dứt. str[3] là ra ngoài mảng rồi, em thao tác trên thằng này là vi phạm vùng nhớ. Chương trình sẽ bị crash ngay. 2 Likes htwap (lu___va_sa__) November 4, 2014, 1:48pm #19 theo e nghĩ thì: str[3] chỉ là cho str 3 vị trí. nên tính từ 0 thì sẽ chạy đến 2 là đủ 3 vị trí rồi nên phải +1 để thêm 1 vị trí cho kí tự kết thúc. 1 Like htwap (lu___va_sa__) November 4, 2014, 1:49pm #20 e code C nhưng đuôi mở rộng là cpp nên dùng lẫn hàm new của C++ vào đc ạ. :3 không biết làm thế có sao không ạ? 2 Likes ltd (Lê Trần Đạt) November 4, 2014, 2:24pm #21 Không sao, nhưng không nên. Nên dùng đuôi .c. Em mới học, cần tách biệt cái nào là C, cái nào là C++. Để sau này không bị nhầm lẫn. Nên bắt đầu đúng với những cái cơ bản, thì khi nâng cao hơn em sẽ học tốt hơn. 1 Like next page → DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Khai Báo Chuỗi Trong C Cách Khai Báo Chuỗi Trong C Và Các Kiến Thức Liên Quan | Ironhack Chuỗi (String) Trong C - Học Lập Trình C Online - Viettuts Chuỗi Trong C Là Gì ? Cách Khởi Tạo, Khai Báo, Gán Và In Chuỗi Trong C Bài 56. Chuỗi Trong C - Lập Trình Không Khó Chuỗi (String) Trong C/C++ Chuỗi Ký Tự Trong C - Wikiversity Beta Chuỗi Các Ký Tự Trong C | Lập Trình Từ Đầu Lập Trình C: Chuỗi (String) | V1Study Lập Trình C: Bài 10 - Chuỗi Ký Tự Trong C - Nguyễn Văn Quân Chi Tiết Bài Học Chuỗi Trong C++ - Vimentor Cơ Bản Về Chuỗi Ký Tự Trong C++ (An Introduction To Std::string) C Cơ Bản: Chuỗi Là Gì ? Các Thao Tác Với Chuỗi ? - DevIOT Lập Trình C: Hàm Xử Lý Chuỗi (String) | V1Study Xử Lý Chuỗi Trong C - EZCODEA