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

Đề tài: Sự khác nhau của hai cách khai báo này là gì??

  1. #1
    Ngày gia nhập
    09 2011
    Bài viết
    1

    Angry Sự khác nhau của hai cách khai báo này là gì??

    Khi e dùng hàm strchr trong thư viện string để tìm một kí tự nào đó trong chuổi thì gặp phải khó khăn là: kí tự cần tìm đó phải được khai báo ở dạng char kitu='a' mà ko ở dạng char *kitu = "a".
    VD như: tìm kí tự a có trong chuỗi "abnhd".
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    main()
    {
    char *chuoi = "abnhd";
    char kitu = 'a'; \\TẠI SAO KO ĐƯỢC KHAI BÁO LÀ: char *kitu = "a" như trên??
    strchr(chuoi, kitu);
    printf("Ki tu %c tim duoc o vi tri thu: %d",kitu, kitu-string);
    getch();
    }

  2. #2
    Ngày gia nhập
    10 2010
    Nơi ở
    Đại học Bách Khoa Hà Nội
    Bài viết
    45

    Trích dẫn Nguyên bản được gửi bởi lytieubinh_269 Xem bài viết
    Khi e dùng hàm strchr trong thư viện string để tìm một kí tự nào đó trong chuổi thì gặp phải khó khăn là: kí tự cần tìm đó phải được khai báo ở dạng char kitu='a' mà ko ở dạng char *kitu = "a".
    VD như: tìm kí tự a có trong chuỗi "abnhd".
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    main()
    {
    char *chuoi = "abnhd";
    char kitu = 'a'; \\TẠI SAO KO ĐƯỢC KHAI BÁO LÀ: char *kitu = "a" như trên??
    strchr(chuoi, kitu);
    printf("Ki tu %c tim duoc o vi tri thu: %d",kitu, kitu-string);
    getch();
    }
    Code:
     strchr (char * str, int character );
    kitu nhất thiết phải là một kí tự, không thể là chuỗi được
    Chẳng biết mình muốn cái gì nữa :v

  3. #3
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn nên xem lại căn bản về các kiểu dữ liệu thôi, mất căn bản nhiều quá.
    2 kiểu dữ liệu mà bạn nói là hoàn toàn khác nhau. Khác cả về nội dung, bản chất lẫn kích thước. Chuỗi có 1 ký tự thì vẫn là chuỗi, ko phải là char.
    char *kitu="a" -> thực tế là 2 ký tự, 1 ký tự 'a', một ký tự '\0', sizeof(char *) = 4
    char kitu = 'a' -> chỉ có duy nhất 1 ký tự 'a', sizeof(char) = 1
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  4. #4
    Ngày gia nhập
    08 2011
    Nơi ở
    /pentest
    Bài viết
    44

    char *chuoi = "abnhd";
    Ở đây "abnhd" là một mảng một chiều từ 0->5 mỗi ô của mảng mang 1 giá trị 'a','b','n','h','d','\0' kí tự '\0' tự động được thêm vào để tạo thành một chuỗi kí tự (chuỗi kí tự được bao bọc bởi dấu ngoặc kép "), cái này khác hoàn toàn với hằng kí tự (được bọc bởi ngoặc đơn ') và hằng kí tự mang giá trị là một số nguyên (mã ASCII) như vậy khai báo trên sẽ cho chuoi nắm địa chỉ của phần tử đầu tiên trong mảng (giá trị chứa trong nó là 'a') và chuoi hoàn toàn là một mảng thuần túy.

    Khai báo thứ 2:

    char kitu = 'a';
    'a' là một hằng kí tự và nó cũng có thể hiểu là một số nguyên, kiểu char cũng chỉ là một tập con của tập nguyên (int) nếu sizeof(char) < sizeof(int), đó là chưa xét phạm vi biểu diễn của bảng mã ASCII là 256 kí tự nên dòng trên là hoàn toàn đúng , còn nếu khai báo kiểu char *kitu = 'a' thì có nghĩa là tạo một con trỏ trỏ tới kiểu kí tự và gán giá trị con trỏ là một số nguyên, điều này cũng ko sai nhưng mà lúc này kitu trỏ vào đâu thì ko ai biết, và nếu sử dụng *kitu thì giá tri của nó chắc chắn ko phải là 'a' mà là một vùng nhớ bất kì mà địa chỉ của nó có giá trị = 'a'

    Điều cuối cùng mert muốn lưu ý là cả trong C, C++ thì khai báo char *chuoi = "abcd" là undefined tức là chuẩn C,C++ không chấp nhận và không hiểu định nghĩa kiểu này, mặc dù có thể (với C) sẽ thậm chí ko có warn thì khai báo như trên cũng rất khó chấp nhận, bạn nên khai báo tường minh rằng const char *chuoi = "abcd"
    We are oft to blame in this...'Tis too much proved.
    - That with devotion's visage and pious action we do sugar o'er the devil himself.

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

  1. Tệp tin *.lib khác *.dll khác nhau như thế nào ?
    Gửi bởi ngusaomanoi trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 18-12-2012, 05:15 PM
  2. Bài tập C Sự khác nhau vế khai báo
    Gửi bởi mylinh2806 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 14-12-2011, 07:24 AM
  3. Kỹ thuật C++ khác nhau giữa khai báo 2 lớp
    Gửi bởi huhuhuhu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 26-09-2011, 04:30 PM
  4. Sự khác nhau giữa hai cách khai báo hàm thư viện
    Gửi bởi sky_night trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 9
    Bài viết cuối: 26-09-2010, 08:27 PM
  5. Sự khác nhau giữa các khai báo int, void, float trong khai báo hàm?
    Gửi bởi toend2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 06-05-2009, 07:19 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