Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lỗi tách họ tên dùng con trỏ hàm

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

    Mặc định Lỗi tách họ tên dùng con trỏ hàm

    em nhập vào họ tên.
    gữi họ tên tới hàm.
    tách.
    vào lại hàm main cout ra. nhưng kết quả bị lỗi. em không rõ bị lỗi chỗ nào ạ. ai giúp đỡ em newbie em cảm ơn rất nhiều !
    #include <iostream>
    #include <string.h>
    using namespace std;

    void tach_ho_ten(char *ht, char *h, char *t)
    {
    int i,j;
    i=0;
    while (!isspace(ht[i])) i++;
    h= new char[i+1];
    strncpy(h, ht,i);
    h[i+1]='\0';

    j=strlen(ht);

    while (!isspace(ht[j])) j--;
    t=new char[strlen(ht)-j];
    strncpy(t,ht+j+1, strlen(ht)-j-1 );
    t[strlen(ht)-j]='\0';
    }

    int main()
    {
    char ht[30], *h,*t;

    cout << "Ho va ten = " ;
    cin.getline(ht,30);

    tach_ho_ten(ht, h, t);

    cout << "Ho = " << h << endl;
    cout << "Ten = " << t ;

    return 0;
    }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    248

    Bạn muốn thay đổi giá trị của con trỏ h và t (muốn nó trỏ đến vùng nhớ đc cấp pháp bởi new) thì bạn phải truyền vào hàm tach_ho_ten con trỏ 2 cấp. Ngoài ra còn 1 số lỗi nữa như new mà ko delete, thêm '\0' vào sai vị trí, gọi strlen nhiều mình đã sửa cho bạn rồi nhé. Lần sau đăng bài bạn nên đưa code vào thẻ [ CODE]
    C++ Code:
    1. void tach_ho_ten(char *ht, char **h, char **t)
    2. {
    3.     int i, j;
    4.     i = 0;
    5.     while (!isspace(ht[i]))
    6.         i++;
    7.     *h = new char[i + 1];
    8.     strncpy(*h, ht, i);
    9.     (*h)[i] = '\0';
    10.  
    11.     int len = strlen(ht);
    12.     j = len - 1;
    13.     while (!isspace(ht[j]))
    14.         j--;
    15.  
    16.     *t = new char[len - j];
    17.     strncpy(*t, ht + j + 1, len - j - 1);
    18.     (*t)[len - j - 1] = '\0';
    19. }
    20.  
    21. int main()
    22. {
    23.     char ht[30], *h, *t;
    24.  
    25.     cout << "Ho va ten = ";
    26.     cin.getline(ht, 30);
    27.  
    28.     tach_ho_ten(ht, &h, &t);
    29.  
    30.     cout << "Ho = " << h << endl;
    31.     cout << "Ten = " << t;
    32.  
    33.     delete[] h;
    34.     delete[] t;
    35.  
    36.     return 0;
    37. }
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

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