【发布时间】:2020-08-10 06:24:10
【问题描述】:
如何使用非文字条目初始化 char * const 数组?条目来自标准输入。我试过了
char * const args[2] = (char * const *)calloc(2,1025);
sscanf(command,"%s %s ",args[0],args[1]);
/*args will be used later*/
如果没有强制转换,则会得到“无效的初始化程序”,如果有强制转换,则会得到“强制转换指定数组类型”。如果我完全避免使用 calloc,那么 args 的两个条目最终都为空。看来无论我做什么,char * const 类型的数组在声明后都无法填充值。
编辑:这是我的下一次尝试
char **args = (char **)calloc(1025,3);
/*Section A start*/
strcpy(args[0],(char*)"the");
strcpy(args[1],(char*)"thethe");
/*Section A end*/
sscanf(command,"%s %s ",args[0],args[1]);
问题是代码块的难题如下。如果我不包括 A 部分,那么 sscanf 之后的 args[0]、args[1] 错误地为空(显然,sscanf 不适用于空变量)。如果我确实包含了 A 部分,我会在 A 部分得到一个段错误。所以无论我转向哪个方向,我似乎都感到困惑。也许有一个替代方案,一些 B 节给出了 args[0], args[1] 一次性值,以便当 sscanf 出现在场景中时它们可以处于非空状态。
【问题讨论】:
-
你是对的,它是 const 的原因意味着它不应该被修改并且可能通过 char * const args[2] = { 'a', 'b' };
-
@OmidCompSCI
'a'是一个字符,而"a"可以衰减为指向字符的指针。 -
好吧,虽然这里所说的一切都是真的,但我想知道你为什么要这样做?你的目标是什么?我猜有更好的方法来做你想做的事,但我需要了解最终目标是什么。
-
@FrankMerrow execvp 需要确切的类型 char * const[]。稍后在我的代码中,我将调用 execvp(args[0],args)。
-
@Displayname X 类型的
const数组与指向 X 类型值的const的指针不同。