Lệnh strcpy gây ra lỗi khi khai báo chuỗi rỗng?

Em không hiểu tại sao khi mình khai báo mảng kí tự để nó rỗng, đồng thời ko khai báo số kí tự như thế này

char a[]="", b[]="";

Thì copy xâu a vào xâu b thì xâu a lại bị thay đổi

strcpy(b,a);

Chương trình chạy đúng khi em khai báo số kí tự, nhưng nếu nhập quá số phần tử quy định thì chương trình lại sai.

Đoạn code e viết ở đây

#include <stdio.h>
#include <string.h>
int main()
{
    char a[]="", b[]="";
    printf("Nhap vao xau:");
    gets(a);
    puts(a);
    puts(b);
    strcpy(b,a);
    strrev(b);
    puts(a);
    puts(b);
}

Ví dụ:

Nhập

123321
  • xâu a chỉ còn:

    23321

  • xâu b thì đúng.

Đấy là bị tràn dữ liệu mà! khai báo mảng làm ngắn gọn thế !

1 Like

^^ mình ko hiểu nó bị gì nữa. @@

mảng của bạn là mảng tĩnh! vì vậy lần đầu bạn khai báo thì số phần tử nó đã là 1 constant ko đổi đc rồi vì thế bạn nhập quá số lượng phần tử thì tràn số báo lỗi thôi!
việc xâu a của bạn mất dữ liệu có thể do hàm strcpy gây ra! bạn thử làm lại từng bước in từng giá trị hoặc debug nó xem giá trị thay đổi rồi sửa lỗi! thân chào bạn

Ờm, đúng rồi bạn, hay hàm strcpy của mình bị lỗi. Mình có debug như bạn nhưng nó sai ngay từ đầu giá trị của a sau khi copy cho b thì bị thay đổi luôn.

2 Likes

Chết chết sai rồi @vp3kilo ơi, em khai báo

char a[]="", b[]="";

có nghĩa là a và b chỉ có độ dài 1 ký tự thôi. Sao mà nhập với copy được. Lỗi ngay.

Em coi thêm 1 video này để nắm nhé

1 Like

Vậy là bắt buộc phải khai báo số phần tử của mảng ạ.

Trong trường hợp chuỗi em phải khai báo. Hoặc em phải gán cho một cái chuỗi dài dài tí

char chuoi_dai[] = "Lê Trần Đạt - DayNhauHoc.Com - Video lập trình C Cơ Bản"

Thì khi này cái chuoi_dai có độ dài bằng với cái đoạn chữ phía trên. Còn trong trường hợp em gán

char chuoi_khong_ky_tu[] = ""

Thì làm gì có độ dài?

1 Like

em mà làm mảng tĩnh e cứ quất

#define MAX 1000
string mang[MAX];

rồi tha hồ vọc

1 Like

max luôn thật. (^^^) :v:

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