将指针数组中的数组复制到 char

Copying array in array of pointer to char

我有一个 char 数组,我正在尝试使用 strncpy 函数将它的一部分(标记化)复制到指向 char 的指针数组的第 0 个索引中。但是在运行时发生分段错误。

代码示例:

char array[30] = "ls -l";
char* args[10];

strncpy(args[0], array + 0, 2);

复制的字符串内容需要分配space; char* args[10] 仅保留 space 用于保存指向内容的指针,而不是内容本身。然后不要忘记为字符串终止字符 '[=12=]' 保留 space。

args[0] = malloc(2+1);
strncpy(agrs[0],array+0,2+1);
agrs[0][2] = '[=10=]';

char *args[10] 有以下声明:

declare args as array 10 of pointer to char

也就是说,我们有一个未初始化指针数组。在尝试将字符放在那里之前,我们需要先让这些指针指向某个地方。记住我们必须 NUL 终止 ('[=14=]') C 字符串,我们可以通过使用 calloc.

同时为我们的字符串分配和 NUL out space

这将使 space 仅用于 'l''s' 以及我们的强制性 '[=14=]'

char original_command[30] = "ls -l";
char *args[10] = { 0 };
args[0] = calloc(3, sizeof (char));
strncpy(args[0], original_command, 2);

或者,我们可以使用malloc,但我们必须记住 NUL 终止字节。

args[0] = malloc(3);
strncpy(args[0], original_command, 2);
args[0][2] = '[=11=]';

总是初始化我们的变量通常是个好主意 - 看看我们如何初始化我们的 args 数组以充满 NULL 指针 (0)。非常清楚他们还没有指向任何有用的地方。

另请注意,如果在我们的源字符串的前 n 字节中未找到 NUL 终止字节,则 strncpy 不会放置它。这就是为什么手动终止我们的目标字符串非常重要。

此外,当我们使用完该内存时,对 *alloc function must be matched later by a call to free 的任何调用。

/* Do whatever needs to be done */
/* ... */
free(args[0]);