对指向字符串C数组的指针执行strncpy时出现分段错误



我正在尝试将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
}
}

最新更新