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

Đề tài: Các bác coi giúp em bài này với ??????

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

    Mặc định Các bác coi giúp em bài này với ??????

    Code:
    #include <stdio.h>
    void strcptay(char *s1,char *s2)
    {
    
    while (*s2 != '\0')
    {
    *s1 = *s2;
    s1++;
    s2++;
    }
    }
    int main()
    {
    char s[100],*p;
    gets(s);
    char f[100]="anh yeu em";
    printf("%s",s);
    strcptay(s,f);
    printf("%s\n",s);
    system("pause");
    }
    /*Khi chạy nếu em nhập vào mảng s chữ 'a' thì xảy ra lỗi.Khi gán trực tiếp s[100]="a" và không dùng hàm gets nữa thì kết quả lại đúng và in ra : "anh yeu em".Nếu dùng hàm strcpy() trong thư viện string.h thì kết quả lại đúng trong cả hai trường hợp.Vậy hàm em khai báo khác với hàm strcpy chỗ nào và nguyên nhân lỗi ra sao mong các bác giúp em? */

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

    Trích dẫn Nguyên bản được gửi bởi congchuc25 Xem bài viết
    Code:
    #include <stdio.h>
    void strcptay(char *s1,char *s2)
    {
    
    while (*s2 != '\0')
    {
    *s1 = *s2;
    s1++;
    s2++;
    }
    }
    int main()
    {
    char s[100],*p;
    gets(s);
    char f[100]="anh yeu em";
    printf("%s",s);
    strcptay(s,f);
    printf("%s\n",s);
    system("pause");
    }
    /*Khi chạy nếu em nhập vào mảng s chữ 'a' thì xảy ra lỗi.Khi gán trực tiếp s[100]="a" và không dùng hàm gets nữa thì kết quả lại đúng và in ra : "anh yeu em".Nếu dùng hàm strcpy() trong thư viện string.h thì kết quả lại đúng trong cả hai trường hợp.Vậy hàm em khai báo khác với hàm strcpy chỗ nào và nguyên nhân lỗi ra sao mong các bác giúp em? */
    Khi bạn khai báo char s[100];, đây là việc khai báo biến POD cục bộ không có khởi tạo, và vùng nhớ chứa s sẽ chứa giá trị rác bất kỳ (giá trị cũ trên stack). Cơ chế này giúp cho chương trình chạy hiệu quả hơn, không mất công khởi tạo vùng nhớ khi không cần thiết. Note: Dữ liệu kiểu POD là gì giải thích hơi dài dòng, bạn tự search.
    Khi bạn khai báo char s[100] = "a"; ==> là khai báo có kèm khởi tạo. Vùng nhớ của s sẽ được khởi tạo bằng 1 chữ a và 99 số 0 đằng sau.
    Hàm copy bạn tự viết không copy ký tự \0 ở cuối chuỗi. Trong trường hợp có khởi tạo, việc này không gây ảnh hưởng vì các ký tự đằng sau được khởi tạo là \0 rồi - tất nhiên, chỉ được lần chạy đầu tiên. Nếu bạn gọi hàm copy 2 lần thì vẫn có thể phát sinh kết quả không như mong muốn

    Túm lại: Không phải do gets mà hàm copy của bạn viết sai

  3. #3
    Ngày gia nhập
    02 2012
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi fbchicken Xem bài viết
    Khi bạn khai báo char s[100];, đây là việc khai báo biến POD cục bộ không có khởi tạo, và vùng nhớ chứa s sẽ chứa giá trị rác bất kỳ (giá trị cũ trên stack). Cơ chế này giúp cho chương trình chạy hiệu quả hơn, không mất công khởi tạo vùng nhớ khi không cần thiết. Note: Dữ liệu kiểu POD là gì giải thích hơi dài dòng, bạn tự search.
    Khi bạn khai báo char s[100] = "a"; ==> là khai báo có kèm khởi tạo. Vùng nhớ của s sẽ được khởi tạo bằng 1 chữ a và 99 số 0 đằng sau.
    Hàm copy bạn tự viết không copy ký tự \0 ở cuối chuỗi. Trong trường hợp có khởi tạo, việc này không gây ảnh hưởng vì các ký tự đằng sau được khởi tạo là \0 rồi - tất nhiên, chỉ được lần chạy đầu tiên. Nếu bạn gọi hàm copy 2 lần thì vẫn có thể phát sinh kết quả không như mong muốn

    Túm lại: Không phải do gets mà hàm copy của bạn viết sai
    Thanks pác nhìu nhìu,hum nào phải mời bác đi trà đá+thuốc lào thui

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

    Trích dẫn Nguyên bản được gửi bởi congchuc25 Xem bài viết
    Code:
    #include <stdio.h>
    void strcptay(char *s1,char *s2)
    {
    
    while (*s2 != '\0')
    {
    *s1 = *s2;
    s1++;
    s2++;
    }
    }
    int main()
    {
    char s[100],*p;
    gets(s);
    char f[100]="anh yeu em";
    printf("%s",s);
    strcptay(s,f);
    printf("%s\n",s);
    system("pause");
    }
    /*Khi chạy nếu em nhập vào mảng s chữ 'a' thì xảy ra lỗi.Khi gán trực tiếp s[100]="a" và không dùng hàm gets nữa thì kết quả lại đúng và in ra : "anh yeu em".Nếu dùng hàm strcpy() trong thư viện string.h thì kết quả lại đúng trong cả hai trường hợp.Vậy hàm em khai báo khác với hàm strcpy chỗ nào và nguyên nhân lỗi ra sao mong các bác giúp em? */
    định tỏ tình bằng C hả bạn???Cố gắng lên nhé

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