用“ strcpy”在2D数组中删除(字符)的一行(字符)时是否存在任何错误

Is there any error when deleting a row (of character) in 2D array, with `strcpy`?

本文关键字:字符 一行 是否 错误 任何 存在 数组 2D 删除 strcpy      更新时间:2023-10-16

我是编程的新手。我编写此简单的代码以在2D数组中删除(字符的)行:

#include <stdio.h>
#include <string.h>
#define M_RW 100
#define M_CH 100
void ArrIn (char a[][M_CH], int &n)
{
    for (int i = 0; i < n; i++)
    {
        printf("a[%d] = ", i);
        gets(a[i]);
    }
}
void ArrOut (char a[][M_CH], int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("a[%d] = %sn", i, a[i]);
    }
}

void ArrDel (char a[][M_CH], int &n, int position)
{
    for (int i = position; i < n - 1 ; i++)
    {
        strcpy(a[i+1], a[i]);
    }
    n--;
}
void main()
{
    char a[M_RW][M_CH];
    int n, k;
    printf("Number of row: n = "); scanf("%d", &n);
    fflush(stdin);
    printf("n---nn");
    ArrIn(a, n);
    printf("n---nn");
    ArrOut(a, n);
    printf("n---nn");
    printf("Want to delete row: k = "); scanf("%d", &k);
    fflush(stdin);
    ArrDel(a, n, k);
    printf("n---nn");
    ArrOut(a, n);
    printf("n---nn");
}

编译后,我输入一些数据:

+ n = 5;
+ a[0] = "Careless whisper";
+ a[1] = "I feel so unsure";
+ a[2] = "As I take your hand";
+ a[3] = "And lead you to the dance floor";
+ a[4] = "...";
+ k = 2;

我想看到结果:

+ a[0] = Careless whisper
+ a[1] = I feel so unsure
+ a[2] = And lead you to the dance floor
+ a[3] = ...

但是,它返回:

+ a[0] = Careless whisper
+ a[1] = I feel so unsure
+ a[2] = I feel so unsure
+ a[3] = I feel so unsure

我不知道为什么a[1]循环多次。


您可以告诉我:使用strcpy时我错了什么?

问题是您将参数向后 strcpy()。语法是 strcpy(destination, source),所以当您编写

strcpy(a[i+1], a[i]);

您是在第一次迭代中从a[2]复制到a[3],然后将a[3]转到a[4]下一个迭代,依此类推。因此,这将a[2]复制到数组中的每个剩余条目。

将其更改为:

strcpy(a[i], a[i+1]);