用“ strcpy”在2D数组中删除(字符)的一行(字符)时是否存在任何错误
Is there any error when deleting a row (of character) in 2D array, with `strcpy`?
我是编程的新手。我编写此简单的代码以在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]);
相关文章:
- 如何从一行中读取特定数量的字符?(C++)
- 如何让字符数组在一行而不是多行中打印出来?
- qt/c - 从一行阅读字符
- 如何在一行中从不同的变量(数据类型)创建一个字符数组?
- 打印一行 2D 字符数组 (C++)
- 如何在一行中输入 c++ 中的字符数组
- 用“ strcpy”在2D数组中删除(字符)的一行(字符)时是否存在任何错误
- 如何从文件中读取一行中的特定字符
- 在C++中一次一行地从文本文件中读取int(好的字符,然后转换)时出现问题
- 如何检查文件的最后一行是否有new_line字符?C++
- 每隔n个字符打印一行换行符
- C++:一次阅读一个字符,直到一行的末尾不起作用
- std::vector<char>并获取一个定界字符的下一行
- 找到文本文件中的最后一行,选择前10个字符并打印到一个新文件中
- 如何在C++中找到一行中包含反斜杠字符的字符串
- 计算字符数组中一行的字符数
- fstream正在为我的文件的每一行添加字符
- 获取一些设置字符后的下一行
- 如何从一行中提取一个字符并将其放入常量字符*中
- 从本地<String>计算一行中的 UTF8 字符