将指针数组中的数组复制到 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]);
我有一个 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
.
这将使 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]);