gpt4 book ai didi

c - 解析C字符串和多指针C字符串

转载 作者:行者123 更新时间:2023-11-30 15:00:29 26 4
gpt4 key购买 nike

我正在尝试制作一个解析器。我有一个仅使用指针的版本,但我想知道如何将其从指针 (char *p) 转换为 c 字符串 (char p[]) 以更熟悉它们的工作原理。

我有一个函数...

int makearg(char s[], char**args[])
{
char *arg1
char arg2[50];

//I'm aware these don't assign the args pointer value to arg2.
arg2[0] = args[0];

//And I'm aware this does.
arg1 = (*args)[0]);
}

我的问题是等价物是什么。或者对正在发生的事情做一个简短的解释。其他解决方案只是提供工作代码,而没有真正说明它是如何工作的。

我认为这与我的内存分配使用指针和 [] 无关。效果很好。如果有人有时间的话,也不确定这是如何运作的。

(*args)[i] = (char*) malloc(sizeof(char) * tokenLen);

最佳答案

第一个语句:

arg2[0] = args[0];

arg2[0] 的类型为 charargs[0] 的类型为 char** 。此作业不起作用,因为它们属于不同类型。

但是,这样的事情会起作用:

arg2[0] = (**args)[0]; /* or even (*args)[0][0] */

因为您给 arg2[0] 一个 char,这是正确的,因为它们是匹配的类型。 **args 是指向 args 第一个元素(即 char*)的指针,并指向 char ,您需要索引[0]。您可以通过多种方式来做到这一点。将 arg2[0] 分配给 args[0][0][0] 甚至 ***args 是有效的,即使这些分配会显得晦涩难懂。

第二条语句:

arg1 = (*args)[0];

会起作用,因为您提供了 arg1,一个 char* 指针。*args 是指向 第一个元素的指针args,即char**,index[0]定位到char*指针。这将 (*args)[0]; 的地址存储在 arg1 中。这甚至可以用一种不太流行的方式来编写 &(*(*args)[0]),尽管这更难阅读并且没有必要。

此外,您的内存分配没有问题。 (*args)[i] 是指向 args 第一个元素的指针,即 char**[i] 将引用一个 char* 指针。您需要事先分配 char** ,因为这也是一个未初始化的指向指针的指针。

您还可以缩短:

(*args)[i] = (char*) malloc(sizeof(char) * tokenLen);

至:

(*args)[i] = malloc(tokenLen);

正如你don't need to cast return of malloc() ,并且 sizeof(char) 始终为 1。'

关于c - 解析C字符串和多指针C字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42079669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com