Exercise 9: Arrays And Strings

Xin chào mọi người, ở bài trước chúng ta đã được làm quen với mảng (array) và biết cách khai báo một chuỗi kí tự đơn giản. Bài này chúng ta sẽ đi sâu hơn một chút về mảng và chuỗi (string) nhé. Bắt đầu thôi nào.

Hãy tạo một file ex9.c với nội dung sau:

#include <stdio.h>

int main(int argc, char* argv[])
{
    int numbers[4] = {0};
    char name[4] = {'a'};

    // first, print them out raw
    printf("numbers: %d %d %d %d\n", 
            numbers[0], numbers[1], numbers[2], numbers[3]);

    printf("name each: %c %c %c %c\n", 
    name[0], name[1], name[2], name[3]);

    printf("name: %s\n", name);

    // setup the numbers
    numbers[0] = 1;
    numbers[1] = 2;
    numbers[2] = 3;
    numbers[3] = 4;

    // setup the name
    name[0] = 'Z';
    name[1] = 'e';
    name[2] = 'd';
    name[3] = '\0';

    // then print them out initialized
    printf("numbers: %d %d %d %d\n", 
            numbers[0], numbers[1], numbers[2], numbers[3]);
 
    printf("name each: %c %c %c %c\n", 
            name[0], name[1], name[2], name[3]);

    // print the name like a string
    printf("name: %s\n", name);
 
    //another way to use name
    char* another = "Zed";

    printf("another: %s\n", another);
    printf("another each: %c %c %c %c\n",
            another[0], another[1], another[2], another[3]);

 return 0;
}
Các bạn phải tự gõ code nhé, như vậy thì trình viết code của các bạn mới mau lên. Sau khi soạn thảo xong thì hãy đọc lại kiểm tra lỗi chính tả nhé, rồi sau đó thử đọc hiểu từng dòng code, nếu không hiểu thì đọc phần giải thích code hoặc để lại comment nhé. Nhớ sử dụng Makefile và Valgrind.

Chạy các bạn phải được như vậy nhé:

$ make ex9
cc -Wall -g ex9.c -o ex9
$ ./ex9
numbers: 0 0 0 0
name each: a
name: a
numbers: 1 2 3 4
name each: Z e d
name: Zed
another: Zed
another each: Z e d
$
Đến phần giải thích code:
1. Tại dòng số 5, chúng ta khai báo một mảng numbers gồm 4 phần tử, và gán 1 phần tử duy nhất (phần tử suy nhất này mặc định là phần tử đầu tiên của mảng), thì 3 phần tử còn lại, C sẽ tự động gán bằng 0, các bạn chú ý điều này!
2. Và tại dòng số 6, chúng ta cũng có một mảng name kiểu char. Và cũng chỉ có một phần tử duy nhất được gán, và các phần tử tiếp theo đương nhiên bằng 0. Nhưng ở bài trước, chúng ta đã biết, kí tự kết thúc chuổi là ‘\0’. Nhưng vì chúng ta khai báo ở đây là chuỗi, nên C sẽ tự động chuyễn chúng thành ‘\0’. Bằng chứng là chúng ta thấy khi in ra màn hình thì ‘\0’ không thể in được. Lưu ý rằng số 0 có mã ascii là 48, còn ‘\0’ có mã ascii là 0. Ghi nhớ điều này nhé. Dễ nhưng cũng dễ quên lắm.

3.Ở dòng thứ 40, tác giả đã dùng con trỏ (pointer) – phần này các bạn được học sau. Các bạn chỉ cần hiểu dòng 40 cũng là một khai báo chuỗi như dòng số 6 vậy. hì!
4. Và cuối cùng là: ngôn ngữ C xem chuỗi và mảng các kí tự là như nhau.

Reseach

1. Gán những kí tự vào mảng numbers, sau đó in ra bằng lệnh printf. Xem chuyện gì xảy ra nhé. Gợi ý: xem bảng mã ASCII.

End

Advertisements