30/09/2018, 18:59

Lỗi ghép xâu strcat_s

void themdocgia(int stt, int madocgia[max], int ngaysinh[max], int gioitinh[max], int ngaythe[max],
    char hoten[max], int d_hoten[max], char cmnd[max], int d_cmnd[max], char email[max], int d_email[max], char diachi[max], int d_diachi[max])
{
    int so,vitri;
    char chu[100];
// nhap ma doc gia
    printf("Nhap MA DOC GIA ");
    scanf_s("%d", madocgia[stt]);
// nhap ho va ten
    printf("Nhap HO VA TEN ");
    fflush(stdin);
    gets_s(chu);
    strcat_s(hoten, chu);
    d_hoten[stt] = d_hoten[stt-1]+ strlen(chu);
    // nhap cmnd
    printf("Nhap CMND ");
    fflush(stdin);
    gets_s(chu);
    strcat_s(cmnd, chu);
    d_cmnd[stt] = d_cmnd[stt - 1] + strlen(chu);
    // nhap ngay thang nam sinh
    vitri = stt * 3;
    printf("Nhap NGAY THANG NAM SINH 
");
    printf("Ngay: 
");
    scanf_s("%d", ngaysinh[vitri]);
    printf("Thang 
");
    scanf_s("%d", ngaysinh[vitri + 1]);
    printf("Nam 
");
    scanf_s("%d", ngaysinh[vitri + 2]);
    // nhap gioi tinh
    printf("Nhap GIOI TINH 
");
    printf("Nam - Nhap 1
");
    printf("Nu - Nhap 2
");
    scanf_s("%d", gioitinh[stt]);
    // nhap email
    printf("Nhap EMAIL
");
    fflush(stdin);
    gets_s(chu);
    strcat_s(email, chu);
    d_email[stt] = d_email[stt - 1] + strlen(chu);
    // nhap dia chi
    printf("Nhap DIA CHI
");
    fflush(stdin);
    gets_s(chu);
    strcat_s(diachi, chu);
    d_diachi[stt] = d_diachi[stt - 1] + strlen(chu);
    // nhap ngay lap the
    printf("Nhap NGAY LAP THE
");
    printf("Ngay: 
");
    scanf_s("%d", ngaythe[vitri]);
    printf("Thang 
");
    scanf_s("%d", ngaythe[vitri + 1]);
    printf("Nam 
");
    scanf_s("%d", ngaythe[vitri + 2]);
}

Chương trình báo lỗi là error C2660: ‘strcat_s’ : function does not take 2 arguments . Ai giải thích giúp e với, e cảm ơn

Pham Van Hai viết 21:10 ngày 30/09/2018

Dưới đây là khai báo của hàm strcat_s()

errno_t strcat_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource 
);

Bạn thấy đấy hàm strcat_s nó nhận 3 tham số, mà bạn lại chỉ truyền có 2 tham số -> lỗi. Bạn phải truyền thêm số ký tự bạn muốn nối vào, ví dụ:
strcat_s(diachi, strlen(chu)-1, chu);

Bình Trọng viết 21:12 ngày 30/09/2018

Thanks anh. Tại sao strlen(chu)-1 vậy a?

Pham Van Hai viết 21:07 ngày 30/09/2018

Mình bị nhầm, mình tưởng strlen(chu) trả về kích thước của chuỗi bao gồm cả ký tự kết thúc chuỗi \0.
Đúng ra là:
strcat_s(diachi, strlen(chu), chu)

kiencon viết 21:13 ngày 30/09/2018

mình nghĩ hàm strcat_s( char *strDestination, size_t numberOfElements, const char *strSource );
ở đây size_t numberOfElements chính là kích thước bộ nhớ đệm strDestination, điều kiện để hàm không bị lỗi là: numberOfElements >= strlen(strDestination) + strlen(strSource) + 1.

Bài liên quan
0