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

Đề tài: Viết lại một số hàm cơ bản về xâu ký tự lỗi Null pointer assignment?

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

    Mặc định Viết lại một số hàm cơ bản về xâu ký tự lỗi Null pointer assignment?

    Mình viết lại một số hàm cơ bản như chèn, xóa trong xâu ký tự.
    + Hàm int POS(char *st1, char *st2) trả về vị trí xuất hiện của st2 trong st1, nếu không có thì trả về -1
    + Hàm char *copy(char *st, int pos, int n) để trích một chuỗi con có n kí tự của chuỗi st bắt đầu từ vị trí pos
    + Hàm char *insert(char *s, char *st, int pó) để chèn chuỗi s vào chuỗi st tại vị trí pos
    + Hàm char *del(char *st, int pos, int n) để xóa n ký tự trong chuỗi s bắt đầu tại ví trí pos

    Dưới đây là code của mình (mình chạy trên Turbo C). Nhờ các bạn xem giúp vì sao
    + hàm copy bị chèn trước một vài ký tự gì đó trước chuỗi kết quả
    + hàm insert của mình ko bị lỗi khi dịch nhưng khi chạy lại cho ra kết quả Null pointer assignment


    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <iostream.h>
    4. #include <string.h>
    5.  
    6. int POS(char *st1, char *st2)
    7. {
    8.      if (strstr(st1,st2)==NULL) return -1;
    9.      else
    10.     {
    11.         char *s=strstr(st1,st2);
    12.         return strlen(st1)-strlen(s);
    13.     }
    14.  
    15. }
    16.  
    17. char *copy(char *st, int pos, int n)
    18. {
    19.     char *temp;
    20.     char *result;
    21.     for(int i=pos; i<pos+n; i++)
    22.     {
    23.         *temp=st[i];
    24.         result = strcat(result,temp);
    25.     }
    26.     return result;
    27. }
    28.  
    29. char *insert(char *s, char *st, int pos)
    30. {
    31.  
    32.     int len = strlen(s);
    33.     int len1 = strlen(st);
    34.     int i, j=0;
    35.     char *temp;
    36.  
    37.  
    38.     if ((pos<0) || (pos>len1))
    39.         {
    40.             cout<<"\n Vi tri chen khong phu hop ";
    41.             return NULL;
    42.         }
    43.     else
    44.        if (pos==len1)
    45.         {
    46.          cout<<"\n Chen cuoi ";
    47.          for(i=len1;i<len1+len;i++)
    48.             st[i] = s[j++];
    49.          for(i=0;i<len+len1;i++) cout<<st[i];
    50.          st[i] = '\0';
    51.          }
    52.  
    53.        else
    54.        {
    55.  
    56.         cout<<"\n Chen vao giua ";
    57.         for(i=len1+len-1; i>=pos+len;i--)
    58.         st[i] =st[i-len];
    59.  
    60.         j=0;
    61.         for(i=pos; i<pos+len;i++)
    62.         st[i] = s[j++];
    63.  
    64.         st[len1+len]='\0';
    65.        }
    66.     return st;
    67. }
    68.  
    69. char *del(char *st, int pos, int n)
    70. {
    71.     int len = strlen(st);
    72.     char *temp;
    73.  
    74.     if ((pos<0) || (pos>=len))
    75.     {
    76.         cout<<"\nVi tri xoa khong hop le ";
    77.         return NULL;
    78.     }
    79.     else
    80.     if (n<=0)
    81.     {
    82.         cout<<"\nSo ki tu xoa khong hop le ";
    83.         return NULL;
    84.     }
    85.     else
    86.       {
    87.         int i;
    88.         for(i=0;i<pos;i++)
    89.             temp[i] = st[i];
    90.         for(i=pos;i<=len-n-1;i++)
    91.             temp[i] = st[i+n];
    92.         temp[i]='\0';
    93.       }
    94.  
    95.  
    96.     return temp;
    97.  
    98. }
    99.  
    100. main()
    101. {
    102.     clrscr();
    103.     /*
    104.     // Minh hoa ham POS
    105.     char *s1,*s2;
    106.     cout<<"Nhap s1 \n";
    107.     gets(s1);
    108.     cout<<"Nhap s2 \n";
    109.     gets(s2);
    110.     cout<<"\n Vi tri la :"<<POS(s1,s2);   */
    111.  
    112.  
    113.  
    114.     //Minh hoa ham copy
    115.     char *chuoicopy;
    116.     int vitritrich, sokitutrich;
    117.     cout<<"Nhap vao chuoi can trich ";
    118.     gets(chuoicopy);
    119.     cout<<"\n Nhap vao so ki tu trich ";
    120.     cin>>sokitutrich;
    121.     cout<<"\n Nhap vao vi tri trich ";
    122.     cin>>vitritrich;
    123.  
    124.     cout<<"\n"<<copy(chuoicopy,vitritrich,sokitutrich);
    125.  
    126.  
    127.     /*
    128.     // Minh hoa ham INSERT
    129.     char *chen, *chuoigoc;
    130.     int vitri;
    131.  
    132.     cout<<"\nNhap chuoi goc : ";
    133.     gets(chuoigoc);
    134.     cout<<"\nNhap chuoi muon chen ";
    135.     gets(chen);
    136.  
    137.     cout<<"\nNhap vi tri can chen ";
    138.     cin>>vitri;
    139.  
    140.     cout<<"\nChuoi sau khi chen la: "<<insert(chen,chuoigoc,vitri); */
    141.  
    142.  
    143.     // minh hoa ham DEL
    144.     /*
    145.     char *xauxoa, *ketqua;
    146.     int vitrixoa, sokituxoa;
    147.     cout<<"Nhap vao xau can xoa :\n";
    148.     gets(xauxoa);
    149.  
    150.     cout<<"Nhap vao vi tri xoa : \n";
    151.     cin>>vitrixoa;
    152.     cout<<"Nhap vao so ki tu can xoa :\n";
    153.     cin>>sokituxoa;
    154.  
    155.     ketqua = del(xauxoa,vitrixoa,sokituxoa);
    156.     if (ketqua!=NULL) cout<<"\Sau khi da xoa :"<<ketqua;    */
    157.  
    158.     getch();
    159. }
    Đã được chỉnh sửa lần cuối bởi khucnam : 12-09-2011 lúc 10:11 PM.

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Chưa đọc code nhưng lướt qua thấy thấy 2 vấn đề:
    - Bạn chưa cấp phát cho chuỗi đầu vào (chuoicopy)
    - Tương tự như vậy, hàm insert bạn cũng phải cấp phát (động) 1 chuỗi kết quả để trả về. Vì không thể đảm bảo chuỗi đầu vào s hoặc st đã được cấp phát đủ bộ nhớ để chứa chuỗi kết quả.

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

    Bạn sửa giùm mình một chút được ko? Như thế nào là cấp phát động?

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


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

  1. nhân 2 ma trận, chạy bị lỗi Null pointer assignment?
    Gửi bởi srmnn trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 4
    Bài viết cuối: 18-02-2012, 11:05 PM
  2. Tại sao phát trinh lỗi "Null pointer assignment" và cách khác phục.
    Gửi bởi nguoirung1.6 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 24-04-2011, 12:36 AM
  3. Viết chương trình fireworks sử dụng pointer
    Gửi bởi mastertan trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 04-02-2010, 06:54 PM
  4. Trong lúc xuất ma trận bị lỗi null pointer assignment
    Gửi bởi tquang620 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 17-06-2009, 09:04 AM
  5. lỗi Null pointer assignmemt
    Gửi bởi phthinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 02-06-2008, 10:14 PM

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