c - C void函数修改指针数组
问题描述
我有一个 tokenize 函数,我想通过该函数修改一个 char 指针数组。但是经过多次尝试后我没有得到结果。有人可以帮助我吗?
下面是代码:
void **tokenize(char **argv, char *line, int *numTokens, char *delimiter)
{
int argc = 0;
char *token = strtok(line, delimiter);
while (token != NULL)
{
argv[argc++] = token;
token = strtok(NULL, delimiter);
}
argv[argc++] = NULL;
*numTokens = argc - 1;
}
void process_cmd(char *cmdline){
char *temp[20];
int *num2;
tokenize(temp, cmdline, num2, "|");
printf("%s\n", temp[0]);
printf("%s\n", temp[1]);
printf("%d\n", *num2);
}
解决方案
在您的process_cmd
函数中,局部变量num2
在定义时未初始化,您直接在调用tokenize
. numTokens
然后您写入in指向的位置tokenize
,这会导致未定义的行为。在大多数情况下,您的程序在尝试写入时会崩溃numTokens
;但理论上任何事情都可能发生。
要解决此问题,您需要将定义更改num2
为:
int num2;
并调用tokenize
如下:
tokenize(temp, cmdline, &num2, "|");
推荐阅读
- javascript - 如何在 TypeScript 中读取此对象
- json - Scala:如何创建一个简单的嵌套 JSON 对象
- python - 查找列表列表中的最大元素
- ios - 使用 Alamofire 5 下载多个 URL
- javascript - 如何在新的浏览器选项卡中加载引导程序
- java - 我怎样才能摆脱 JCombobox 内的蓝色突出显示?
- python - 添加 Alpha 通道时 plt.imsave 不起作用
- python - 如何根据列聚合数据
- bootstrap-4 - 使用 d-inline 的 Div 出现在两行
- javascript - 如何使用 Rails 5.2 从 Postgres 读取 json 数据到 HTML 页面?