我正在尝试创建一个简单的数组扩展函数,该函数创建一个新数组,其值与前一个数组相同并扩展了一个值:
char* test(char array[], int expandBy) {
char newArray[sizeof(array) + expandBy];
strncpy(newArray, array, sizeof(array));
return newArray;
}
但是,我收到编译时错误expression must have a constant value
。我看到的类似问题的所有答案都建议使用宏,但如果我事先不知道该值,我就不能使用宏。
有谁知道我该如何解决这个问题,或者是否有替代方案?
这是因为将数组传递给函数实际上传递的是指针,所以sizeof
给你的是指针的大小而不是数组的大小,一个简单的解决方案是
char *test(char *array, size_t current_size, size_t expand_size)
{
char string[current_size + expand_size + 1];
// Rest of your code
}
但是,从这个函数返回数组 string
是错误的,因为它只在函数内有效。
我认为在继续使用 C 语言编写代码之前,您需要阅读有关内存分配、数组和指针的内容,因为很明显您还不具备所需的知识。
此外,通常您应该避免使用 strncpy()
,因为该函数不能保证 null
终止符,结果很容易以非 null
终止的数组,您会假设它是一个字符串,但它当然不是。