30/09/2018, 20:22

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
", z);
    printf("gia tri thu 12 cua z la: %c
", 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

Gió viết 22:39 ngày 30/09/2018

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

Pham Van Hai viết 22:22 ngày 30/09/2018
  • 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.
sang le viết 22:34 ngày 30/09/2018

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";
Pham Van Hai viết 22:28 ngày 30/09/2018

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.
sang le viết 22:38 ngày 30/09/2018

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

Bài liên quan
0