我有一个功能
int executeCommand(char args[][TOKENSIZE]){
char *argv[] = {args[0], args[1]}; // This works
char *argv[] = {args}; // This doesn't
}
args变量的长度不固定,所以我不能按原样使用第一行。由于某些原因,我不想使用malloc或free。有没有办法从args初始化这个argv数组而不用硬编码条目数。
答案 0 :(得分:2)
该功能需要以某种方式知道大小,否则就不可能完成任务。一种可能的方法是使用指向VLA的指针:
int executeCommand(size_t n, char args[n][TOKENSIZE]){
char* argv[n];
for(size_t i=0; i<n; i++)
{
argv[i] = args[i];
}
}
至于为什么你不能简单地使用args
而不是复制数组地址,我不知道。
数据的完整硬拷贝看起来像
char argv[n][TOKENSIZE];
memcpy(argv, args, sizeof(char[n][TOKENSIZE]));