Thông báo

Collapse
No announcement yet.

Kiểu pointer trong CV

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Kiểu pointer trong CV

    Mình có 1 vấn đề thắc mắc muốn đưa ra nhờ các bạn chỉ giúp.
    char rx_buffer0[68] là một mảng 67 byte
    char * cutstring;
    sau đó mình dùng hàm
    copystring(cutstring,rx_buffer0,6);
    đây là hàm copystring mình viết:
    Code:
    void copystring(char* dest,char* src, unsigned int count)
    {unsigned int i;
    for(i=1;i<count;i++)
    {
    dest[i]=src[i];
    }
    mình đem vào prorues thử thì đúng nhưng khi nạp vào con atmega128 thì kết quả ra không đúng, không biết nguyên nhân do đâu.

    mảng rx_buffer0 có thể xem là con trỏ rx_buffer0 được không?
    tôi không thể dùng hàm strstrf(rx_buffer0,"ABCD") để tìm chuỗi ABCD trong mảng rx_buffer0. mặc dù chương trình không báo lổi thực thi trên protues đúng nhưng khi nạp vào atmega thì chạy không đúng.
    vài điều thắc mằc về con trỏ mong các bạn góp ý kiến giải thích giúp mình
    Last edited by bluechip; 09-05-2009, 02:25.

  • #2
    char rx_buffer0[68] là một mảng 68 byte

    bạn không gọi copystring(cutstring,rx_buffer0,6); mà phải là copystring(cutstring,&rx_buffer0,6); để đưa địa chỉ mảng vào chứ không phải là dữ liệu của mảng
    ----------------------
    Bể học là mênh mông!

    Comment


    • #3
      Nếu ta dùng copystring(cutstring,&rx_bufer0,6) thì CV sẽ báo lỗi địa chỉ không hợp lệ(illegal address). Nếu như dùng tên của mảng không mà không chỉ đến phần tử của mảng nào thì có hiểu là địa chỉ của mảng không vì nếu dùng như vậy thì chương trình dịch không có lỗi. các bạn xem lại giúp mình nha

      Giả sử tôi muốn xuất chuỗi trong cutstring ra cổng serial thứ 2 thì tôi viết chương trình con như thế này mà vẫn không thực hiện đượ:

      Code:
      void putchar1(char c)
      {
      while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
      UDR1=c;
      }
      
      
      void putstring1(unsigned char* st)
      { 
      unsigned int i,j;
      j=strlen(st);
      for(i=0;i<j;i++)
       {
        putchar1(st[i]);
      
       }
      Tôi vẫn chưa hiểu rõ và phân biệt kiểu con trỏ với kiểu mảng mong các bạn chỉ dẫn thêm.

      Comment


      • #4
        Trong Codevision, kiểu mảng chính là kiểu con trỏ với pointer là địa chỉ của phần tử đầu tiên trong mảng (tức là rx_buffer0[0]). Do đó đoạn code của bạn Bluechip là hoàn toàn đúng. Còn nếu viết copystring(cutstring,&rx_buffer0,6); là hoàn toàn sai!.

        Bạn có thể post lại chương trình của bạn cụ thể hơn được không? để mọi người góp ý.

        Comment

        Về tác giả

        Collapse

        bluechip Tìm hiểu thêm về bluechip

        Bài viết mới nhất

        Collapse

        Đang tải...
        X