gpt4 book ai didi

VS2015中编译器显示 "Expression must have a constant value"(C编程)

转载 作者:行者123 更新时间:2023-11-30 20:21:46 30 4
gpt4 key购买 nike

所以我想创建一个交换函数来动态分配字符数组的大小。是否可以?推荐吗?我的代码显示错误。

void swap(void * vp1, void * vp2, int size)
{
char buffer[size]; //size must have a constant value is the error i am getting.
memcpy(buffer, vp1, size);
memcpy(vp1, vp2, size);
memcpy(vp2, buffer, size);
}

最佳答案

char buffer[size];

在编译时大小未知的数组称为变长数组。这些是仅限 C 语言的功能。由于这会产生错误,因此您正在使用 C++ 编译器。您必须更改大小,以便在编译时知道它。

以下是有效的 C++ 数组定义

#define NUM 8
int a[16];
int a[NUM];

这是格式不正确的:

int n;
printf("What is your age?\n");
scanf("%d", &n);

int a[n];

因为 n 取决于用户输入的内容。

解决方案是将 void 指针参数转换为指向 unsigned char 的指针,然后操作 unsigned char *

void swap(void *a, void *b, size_t n)
{
unsigned char *p = (unsigned char *) a,
*q = (unsigned char *) b,
tmp;

for (size_t i = 0; i < n; ++i) {
tmp = p[i];
p[i] = q[i];
q[i] = tmp;
}
}

但是由于您使用的是 C++,因此最好使用模板。

关于VS2015中编译器显示 "Expression must have a constant value"(C编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41412881/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com