c - Memcpy 覆盖 3 维数组中的区域
问题描述
我正在尝试制作一点 bash 并将字符串解析为 3 维数组。第一个索引是 cmd,第二个是参数,第三个是字符。
不,我的问题是,当我 memcpy 最后一个参数时,它会将其写入下一个命令。
int main()
{
char buffer[256] = {"c1 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 \n"};
char arg_list[10][10][255];
// fgets(buffer, 255, stdin);
int c = 0;
int index_cmd = 0;
int index = 0;
int index_arg = 1;
int lastIndex = 0;
int nxt_cmd = 0;
for(c = 0; c < 255; c++)
{
if (buffer[c] == '\r' || buffer[c] == '\n' || buffer[c] == ' ')
{
if(index_cmd == 0 || nxt_cmd)
{
memcpy(arg_list[index_cmd][0], buffer + lastIndex, c - lastIndex);
arg_list[index_cmd][0][c-lastIndex] = 0;
index_cmd++;
index_arg = 1;
nxt_cmd = 0;
}
else if(buffer[c-1] == '&' || buffer[c-1] == '|')
{
memcpy(arg_list[index_cmd][0], buffer + lastIndex, c - lastIndex);
arg_list[index_cmd][0][c-lastIndex] = 0;
nxt_cmd = 1;
index_cmd++;
index_arg = 1;
}
else if(buffer[c-1] != ' ' && buffer[c+1] != ' ')
{
memcpy(arg_list[index_cmd-1][index_arg] , buffer + lastIndex, c - lastIndex);
arg_list[index_cmd-1][index_arg][c-lastIndex] = 0;
index_arg++;
}
lastIndex = c +1;
}
}
int i,j,k = 0;
for(i = 0; i < 4; i++)
{
for(j =1; j < 11; j++)
{
printf("command %d %s\n",i,arg_list[i][0]);
printf("arg %d %s\n",j, arg_list[i][j]);
}
}
}
代码示例给了我以下输出:
command 0 c1
arg 1 a1
command 0 c1
arg 2 a2
command 0 c1
arg 3 a3
command 0 c1
arg 4 a4
command 0 c1
arg 5 a5
command 0 c1
arg 6 a6
command 0 c1
arg 7 a7
command 0 c1
arg 8 a8
command 0 c1
arg 9 a9
command 0 c1
arg 10 a10
command 1 a10
arg 1
command 1 a10
arg 2
command 1 a10
arg 3
command 1 a10
arg 4
command 1 a10
arg 5
command 1 a10
arg 6
command 1 a10
arg 7
command 1 a10
arg 8
command 1 a10
arg 9
command 1 a10
因此,它将参数 10 写入数组中的位置(如果提供了下一个命令)。
我真的不知道是什么问题,但我认为它与memcpy
。
我很感激任何帮助:)
解决方案
在 C 中,数组的索引是 0...(数组 1 中的元素数)。所以关于:索引
char arg_list[10][10][255];
第一个索引的范围为 0...9
第二个索引的范围为 0...9
第三个索引的范围为 0...254。
已发布代码中超出允许范围的索引区域是错误并导致未定义的行为
推荐阅读
- sql - SQL如何返回去年同期数据?
- python - 使用第二个字典中的数据丰富 Python 字典
- git - Sonarqube - SCM 提供程序自动检测和 PR 装饰在 .git 目录中的分析失败
- java - 处理空参数的函数式方法
- ruby - ruby on rails 用双引号替换字符串中的单引号
- java - 有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?
- java - 虚拟机初始化期间发生错误无法加载本机库:
- java - 调整线性布局容器的大小不会更新其中包含的视图的 onClickListner 位置
- kotlin - 为什么我的代码不呈现界面或根本不工作?
- sorting - Java中的字符串排序