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 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Lỗi hàm strcat - không hiểu sai ở đâu @@

    Em có đoạn code sau :
    Mã:
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    #include<ctype.h>
    #include<stdlib.h>
    void tach_ten(char* sinhvien,char** name);
    int main()
    {
        char* s1,*s2;
        char s[30];
        char* name;
        int i;
        printf("nhap vao sinh vien 1 :");
        gets(s);
        s1 = (char*)malloc((strlen(s)+1)*sizeof(char));
        strcpy(s1,s);
        printf("nhap vao sinh vien 2 :");
        gets(s);
        s2 = (char*)malloc((strlen(s)+1)*sizeof(char));
        strcpy(s2,s); 
       printf("sinh vien 1:");
         puts(s1);
         printf("sinh vien 2:");
         puts(s2);
        tach_ten(s1,&name);
        printf("ten la :");puts(name);
    strcat(name,s1);
    puts(s1);
      
         getch();
         } 
    
    void tach_ten(char* s,char** name)
    {	int k;
    	int l = strlen(s);
    	for(k=l-1;k>0;k--)
    	 if(s[k]==' ') 	break;						
       *name = s+k+1;
    }
    nội dung là nhập 2 tên vào 2 xâu s1,s2 cấp phát động .Hàm tách_ten để tách phần tên của 1 xâu ra (giả sử các họ tên viết dưới dạng chuẩn ,họ , tên ,đệm cách nhau đúng 1 dấu cách và không có dấu cách thừa ở cuối ).
    em test hàm tach_ten thì tách được tên rồi .nhưng đến khi dùng hàm strcat(name,s1) để ghép s1 vào sau cái tên kia ( phục vụ cho sắp xếp họ tên kiểu VN). thì toàn bị lỗi dừng chương trình mà chả hiểu lỗi ở đâu [IMG]images/smilies/17.gif[/IMG][IMG]images/smilies/17.gif[/IMG][IMG]images/smilies/17.gif[/IMG] mong mọi người kiểm tra giúp em ạ .

  2. #2
    Trích dẫn Gửi bởi huycan
    bạn chưa cấp phát bộ nhớ cho name thì làm sao mà strcat được?

    tach_ten chỉ là cho name trỏ vào vùng nhớ của s1 mà thôi...

    mình sửa lại phần cuối tí xíu:

    Mã:
    tach_ten(s1,&name);
    printf("ten la :");puts(name);
    strcpy(s, name);
    name = (char*)malloc((strlen(s1)+1 + strlen(s))*sizeof(char));
    strcpy(name, s);
    strcat(name,s1);
    puts(name);
    free(s1);
    free(s2);
    free(name);
    cho mình hỏi vậy cái chỗ bên trên : strcpy(s,name) , mình cũng chưa cấp phát bộ nhớ cho name thì nó lấy cái gì để cop vậy bạn ? có phải là nó lấy phần dữ liệu từ sau chỗ trỏ bởi name đến khi gặp ký tự kết thúc xâu phải không bạn ?

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bạn chưa cấp phát bộ nhớ cho name thì làm sao mà strcat được?

    tach_ten chỉ là cho name trỏ vào vùng nhớ của s1 mà thôi...

    mình sửa lại phần cuối tí xíu:

    Mã:
    tach_ten(s1,&name);
    printf("ten la :");puts(name);
    strcpy(s, name);
    name = (char*)malloc((strlen(s1)+1 + strlen(s))*sizeof(char));
    strcpy(name, s);
    strcat(name,s1);
    puts(name);
    free(s1);
    free(s2);
    free(name);

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    đúng vậy. sau hàm tach_ten thì con trỏ name chỉ vào 1 vị trí của s1 là từ cuối cùng của s1.

 

 

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
  •