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.

Thực tế khắc nghiệt viết 18:24 ngày 30/09/2018

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

vp3kilo viết 18:21 ngày 30/09/2018

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

Thực tế khắc nghiệt viết 18:21 ngày 30/09/2018

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

vp3kilo viết 18:26 ngày 30/09/2018

Ờ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.

Nguyễn Minh Dũng viết 18:26 ngày 30/09/2018

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é

Source code #include <stdio.h> #include <stdlib.h> int main() { char dau_hoi = '?'; printf("dau hoi %c\n", dau_hoi); char ky_tu_dac_biet = '\\'; printf("ky tu dac biet %c\n", ky_tu_dac_biet); char mang_ky_tu[3] = {'d', 'a', 't'}; printf("mang ky tu %c%c%c\n", mang_ky_tu[0], mang_ky_tu[1], mang_ky_tu[2]); char mang_ky_tu_chuyen_nghiep[] = "dat - chuyen nghiep"; printf("mang ky tu %s\n", mang_ky_tu_chuyen_nghiep); char mang_mot_ky_tu[] = ""; printf("%c…
vp3kilo viết 18:20 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:26 ngày 30/09/2018

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?

Thực tế khắc nghiệt viết 18:21 ngày 30/09/2018

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

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

#define MAX 1000
string mang[MAX];

rồi tha hồ vọc

vp3kilo viết 18:19 ngày 30/09/2018

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

Bài liên quan
0