对指向字符串数组的指针执行 strncpy 时出现分段错误 C
Segmentation fault while performing strncpy to pointer to an array of strings C
我正在尝试将 s 的子字符串复制为指向字符串数组的指针。下面是我的代码。我已经使用 malloc 分配了内存。但是当我尝试执行 strncpy 时,出现分段错误。如果我的代码有任何问题,谁能告诉我?或者是否允许对指向字符串的指针数组进行 strncpy
s是长度为32的字符串
char **suptr = (char **)malloc(sizeof(char *) * 11);
if(suptr != NULL)
{
strncpy(suptr[0], s, 10);
strncpy(suptr[1], s+10, 10);
strncpy(suptr[2], s+20, 10);
strncpy(suptr[3], s+30, 2);
}
提前致谢
您已经分配了一个 char
指针数组。但是,这些指针未初始化。也就是说,它们包含垃圾数据,实际上并没有指向任何有意义的地方。因此,当您尝试向它们复制数据时,您正在写入无效地址。
每个指针都需要首先指向一个有效的内存部分。实现此目的的一种简单方法是:
for (int k=0; k<11; k++) {
suptr[k] = malloc(sizeof(char)*10); // Or whatever length you want.
if ( !suptr[k] ) {
// handle the error
}
}
我正在尝试将 s 的子字符串复制为指向字符串数组的指针。下面是我的代码。我已经使用 malloc 分配了内存。但是当我尝试执行 strncpy 时,出现分段错误。如果我的代码有任何问题,谁能告诉我?或者是否允许对指向字符串的指针数组进行 strncpy
s是长度为32的字符串
char **suptr = (char **)malloc(sizeof(char *) * 11);
if(suptr != NULL)
{
strncpy(suptr[0], s, 10);
strncpy(suptr[1], s+10, 10);
strncpy(suptr[2], s+20, 10);
strncpy(suptr[3], s+30, 2);
}
提前致谢
您已经分配了一个 char
指针数组。但是,这些指针未初始化。也就是说,它们包含垃圾数据,实际上并没有指向任何有意义的地方。因此,当您尝试向它们复制数据时,您正在写入无效地址。
每个指针都需要首先指向一个有效的内存部分。实现此目的的一种简单方法是:
for (int k=0; k<11; k++) {
suptr[k] = malloc(sizeof(char)*10); // Or whatever length you want.
if ( !suptr[k] ) {
// handle the error
}
}