我想编写一个返回另一个数组的一部分的函数。以下是我尝试实现它的方法:
char *subarrayWithRange(char *array, int location, int length)
{
char subarray[length];
subarray = (array + location);
return subarray;
}
当我尝试编译它时,clang
给了我这个错误:
error: array type 'char [length]' is not assignable
显然,我无法将数组分配给另一个数组的子数组。但是,当我将子数组定义为指针时,这是有效的:
char *subarrayWithRange(char *array, int location, int length)
{
char *subarray;
subarray = (array + location);
return subarray;
}
现在,我无法定义子阵列的长度。这是C语言吗?我可以以某种方式解决这个问题吗?
答案 0 :(得分:4)
您无法分配数组。您也无法返回本地数组,因为当函数退出时,它使用的内存超出了范围。您必须使用动态(堆)内存,例如使用malloc()
要分配。
此外,如果您打算将子数组作为有效字符串,则必须终止该子数组:
char * substringWithRange(const char *string, size_t start, size_t length)
{
char *p = malloc(length + 1);
if(p != NULL)
{
memcpy(p, string + start, length);
p[length] = '\0';
}
return p;
}
请注意,上面假设length
永远不会超过输入长度,因为没有检查。你应该添加这样的检查,然后截断。