30/09/2018, 16:11
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.
Bài liên quan
Đấy là bị tràn dữ liệu mà! khai báo mảng làm ngắn gọn thế !
^^ 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.
Chết chết sai rồi @vp3kilo ơi, em khai báo
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é
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í
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
Thì làm gì có độ dài?
em mà làm mảng tĩnh e cứ quất
rồi tha hồ vọc
max luôn thật. (^^^)