Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Lỗi ở đâu ạ ? Các anh xem giúp !

  1. #1
    Ngày gia nhập
    12 2008
    Bài viết
    21

    Mặc định Lỗi ở đâu ạ ? Các anh xem giúp !

    Em có copy một đoạn code trên 4rum về rồi sửa lại đôi chút. 1 Prog về tìm vị trí chuỗi con trong chuỗi mẹ. Nói chung nó chạy tốt, nhưng cứ mỗi khi chạy xong lệnh cuối (getch() và nhấn Enter thì cửa sổ DOS tắt đi, cái báo lỗi hiện ra như vầy :

    An Unhandle exception 0x........ Access violation

    các anh chỉ giúp em xem nó bị lỗi chô nào nhé!

    Code:
    //Author: MrCuxu
    
    #include <stdio.h>
    #include <conio.h>
    
    int IsEqual(char* s1,char* s2)
    {
        int result = 0;
        for(;;)
        {
            if( (*s1=='\0') | (*s2 == '\0') ) {result = 1;break;}
            if(*s1!=*s2) break;
            s1++;s2++;
        }
        return result;
    }
    int main()
    {
        char ss1, ss2;
        char* s1 = &ss1; 
        char* s2 = &ss2;
        char* p = s1;
    
    	printf("nhap chuoi~ me vao` : ");
    	scanf("%s" , &ss1);
    	printf("nhap chuoi~ con vao` : ");
    	scanf("%s" , &ss2);
    
    	printf("\n ---- \nTim vi tri 1 chuoi xuat hien dau tien trong chuoi khac\n\n");
        printf("%s\n",s1);
        printf("%s\n\n",s2);
        
    	
    	//--Ket qua cac vi tri se lay duoc
    	char result[1];
    	int result_count=0;
    	
    	for(;;)
        {
            if(*p=='\0') 
            {
                printf("Ko tim thay\n");
                break;
            }
            if(IsEqual(p,s2)) 
            {
                result[result_count] = (int)(p-s1) ;
    			result_count++;
                //break;
            }
            p++;
        }
    
    	printf("\n\n\n----------%d \n\n\n" , result_count );
    
    	if (result[0]==NULL) 
    		printf("Khong tim thay ket qua nao !");
    	else{
    		printf("Tim thay chuoi con tai cac vi tri ");
    		for (int i=0;i<result_count;i++)
    			{printf("%d , " , result[i] );}
    		printf(" cua chuoi~ me ");
    	}
    	
    	getch();
        return 0;
    }
    Đã được chỉnh sửa lần cuối bởi gadapchetvoi : 04-12-2008 lúc 09:22 PM.

  2. #2
    Ngày gia nhập
    09 2008
    Bài viết
    28

    Đây là bài tui đã sửa đổi lại chút đỉnh, thử chạy xem sao nha:

    Code:
    //Author: MrCuxu
    
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    int IsEqual(char* s1,char* s2)
    {
       int result = 0;
       for (;;)
       {
          if ((*s1 == '\0') || (*s2 == '\0'))
          {
             result = 1;
             break;
          }
          if (*s1 != *s2)
             break;
          s1++;
          s2++;
       }
       return result;
    }
    
    int main()
    {
       char ss1[100], ss2[100];
       char* s1 = ss1;
       char* s2 = ss2;
       char* p = s1;
    
       printf("nhap chuoi~ me vao` : ");
       gets(ss1);
       fflush(stdin);
       printf("nhap chuoi~ con vao` : ");
       gets(ss2);
       fflush(stdin);
       printf("\n ---- \nTim vi tri 1 chuoi xuat hien dau tien trong chuoi khac\n\n");
       printf("chuoi~ me  = %s\n",s1);
       printf("chuoi~ con = %s\n",s2);
    
    
       //--Ket qua cac vi tri se lay duoc
       int vitri=0;
       char result[100];
       memset (result, '\0', sizeof(result));
       int result_count=0;
    
       for (;;)
       {
          if (*p == '\0')
             break;
    
          if ( IsEqual(p,s2) )
          {
             if ((int)(p-s1) == 0)
                result[result_count] = 'z';  // gan chu 'z' the so 0
             else
                result[result_count] = (int)(p-s1);
             result_count++;
          }
          p++;
       }
    
       if (result_count)
          printf("\n\nTim thay tai %d vi tri.\n\n" , result_count );
    
       if (result[0] == '\0')
          printf("Khong tim thay ket qua nao!");
       else{
          printf("Tim thay chuoi con tai cac vi tri sau: ");
          for (int i=0;i<result_count;i++)
          {
             if (result[i] == 'z')
                printf("%d" , 0);
             else
                printf("%d" , result[i]);
             if ((i+1)<result_count)
                printf(", ");
          }
          printf(" cua chuoi~ me.\n");
       }
    
       getch();
       return 0;
    }

  3. #3
    Ngày gia nhập
    12 2008
    Bài viết
    21

    Cảm ơn anh nhìu, nó chạy tốt rồi !

    memset (result, '\0', sizeof(result));

    Anh giải thích giúp em lệnh này đc ko ạ ?

  4. #4
    Ngày gia nhập
    02 2008
    Bài viết
    14

    Code:
    memset (result, '\0', sizeof(result));
    Gán toàn bộ giá trị của mảng result bằng \0
    Chỉ có thể biết nhiều hay ít, khó có thể biết cho đủ...

  5. #5
    Ngày gia nhập
    12 2008
    Bài viết
    21

    Thanks mèo tam thể!

Các đề tài tương tự

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn