hỏi về chuỗi char z[10]

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char z[10];
    printf("nhap z:");
    scanf("%s", z);
    printf("gia tri cua z la: %s\n", z);
    printf("gia tri thu 12 cua z la: %c\n", z[11]);
    return 0;

}

câu hỏi 1: em muốn hỏi cái phần [10] trong char z[10] nghĩa là gì? mới đầu em nghĩ nó là số phần tử trong mảng ký tự z. Nhưng như vậy khi chạy code em nhập khoảng mười mấy ký tự cho z nó vẫn nhận, vậy là em nghĩ sai rồi

câu hỏi 2: cho phần ở dưới: tại sao không khai báo cho y[10] như vậy được?

#include <stdio.h>
#include <stdlib.h>

int main()
{
char y[10] = 'abcdefghij';
    printf ("%c", y[2]);
}

xin mọi người giúp dùm

C luôn có 1 kí tự '\0 dùng để kết thúc xâu, vì thể nếu 1 mảng char n phần tử thì chỉ chứa tối đa n-1 kí tự thôi (mang ý nghĩa là xâu trong c, trừ Th dùng mảng với mục đích khác thì nó như 1 mảng bình thường n ptu)
Y[10] là nằm ngoài vùng nhớ khai báo. Bạn không được truy cập ngoài chỉ số của mạng

  • Thứ nhất đó đúng là số phần tử của một mảng. Bạn có thể nhập hơn được số phần tử vì trong C không check lỗi ngoài phạm vi của mảng. Tuy nhiên bạn không nên làm điều này vì có thể các lỗi nguy hiểm khi chạy chương trình.
  • Thứ 2 trong C dấu nháy đơn (’) là để khai báo 1 ký tự ví dụ: 'a' còn dấu nháy kép (") là dùng cho chuỗi ký tự. Bạn khởi tạo chuỗi mà dùng dấu nháy đơn là sai, mà phải dúng dấu nháy kép.
1 Like

nếu vậy khi khai báo 2 cách dưới đây là như nhau hả bạn @Pham_Van_Hai

char x[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
char x[10] = "abcdefghij";

Khác nhau bạn ah.

  • Thứ nhất bạn cần biết khái niệm string trong C: string là một mảng các ký tự (kiểu char) kết thúc bằng ký tự '\0'.
  • Dòng đầu tiên là một mảng ký tự, không phải chuỗi -> nếu bạn cho thêm ký tự \0 này ở cuỗi thì nó mới tương đương nhau.
  • Dòng thứ 2 là một chuỗi, vì khi bạn để ký tự trong dấu nháy kép thì C mặc định sẽ thêm \0 ở cuối.
2 Likes

tks bạn nhiều, mình mới học nên còn mông lung lắm :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?