Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Ghép 2 xâu không cần strcat()

    Mình mới học lập trình C. Hôm nay mình làm bài ghép 2 xâu không cần strcat().
    Và có một thắc mắc như sau. Dưới đây là code của mình
    Mã:
    #include <conio.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char *s1,*s2;
    
    void nhap()
    {
     s1=(char *) malloc (100);
     s2=(char *) malloc (100);
     printf("Nhap xau s1= "); fflush(stdin); gets(s1);
     printf("Nhap xau s2= "); fflush(stdin); gets(s2);
    }
    
    void xuat()
    {
     char *temp=s1;
     while (*s1!='\0') s1++;
     while (*s2!='\0')
           {
    	*s1=*s2;
    	s1++;
    	s2++;
           }
     *s1='\0';
     while (*temp!='\0') printf("%c",*temp++);
    }
    
    void main()
    {
     clrscr();
     nhap();
     xuat();
     getch();
    }
    Trong hàm xuat(). Nếu mình không đặt dòng *s1='\0' thì kết quả in ra ngoài 2 xâu được nối với nhau. Còn có 1 đống kí tự đặc biệt.
    Vấn đề mình thắc mắc là tại sao lại có đống kí tự đó. Bạn nào giải đáp giúp mình với.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vì trong C quy ước chuỗi kết thúc bằng "\0", các lệnh có sẵn cũng theo quy ước này.
    Mà bạn thay cái while gì đó bằng puts() nhé.
    p/s: đã malloc thì phải free() chứ?

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi tuan.us
    đọc kĩ code đi bạn.
    Đây là dùng con trỏ để điều khiển xâu mà. dòng *s1='\0' ở cuối hàm xuat() đấy
    BẠn mới phải xem lại cachs trình bày ội dung bài viết, tôi đã sơm biết đc nhưng đến nỗi bạn k0 muốn chỉ rõ và thờ ơ thì ai rảh đi giúp bạn

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hàm xuất là hàm j vậy ? Nó k0 phải là mảng xuất hả?????
    Đặt dòng *s1='\0' chỗ nào????


    Sau khi thực hiện 2 lệnh while thứ 2 thì mình nó chưa hiểu đc là chuỗi s1 tới kết thúc hay chưa.
    MÌnh nghĩ là vậy

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi aboq
    hàm xuất là hàm j vậy ? Nó k0 phải là mảng xuất hả?????
    Đặt dòng *s1='\0' chỗ nào????


    Sau khi thực hiện 2 lệnh while thứ 2 thì mình nó chưa hiểu đc là chuỗi s1 tới kết thúc hay chưa.
    MÌnh nghĩ là vậy
    đọc kĩ code đi bạn.
    Đây là dùng con trỏ để điều khiển xâu mà. dòng *s1='\0' ở cuối hàm xuat() đấy

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi prog10
    Vì trong C quy ước chuỗi kết thúc bằng "\0", các lệnh có sẵn cũng theo quy ước này.
    Mà bạn thay cái while gì đó bằng puts() nhé.
    p/s: đã malloc thì phải free() chứ?
    tks bạn đã chỉ giáo. [IMG]images/smilies/biggrin.png[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •