我有一个以int colours[4][4] = GenerateSomeConfig(); // Gets some combination of colours
int i = GetIndex(colours); // This is the main function I was asking about
int colours2[4][4] = GetConfig(i); // This is the reverse of GetIndex()
assert(CompareGridsEqual(colours, colours2)); // This shouldn't break
为参数的函数。 const char**
包含const char**
,a.1
,a.2
,a.3
,a.4
等文件列表。
如何创建这样的双指针?我的名称(如上面的a.5
为a
)和文件计数(例如const char*
,1
,2
...作为{{1} })在两个不同的变量中。
我已经尝试声明3
采用unsigned int
循环直到达到const char**
并使用for
在循环中连接,但它不起作用。< / p>
file_count max
答案 0 :(得分:1)
我有一个以
const char**
为参数的函数。
这并不意味着您必须将const char**
传递给它。通过char**
也可以。
我已经尝试声明
const char**
采用for循环直到达到file_count
max
您的循环打印到files
而不为其分配内存。您需要首先malloc
files
,然后是其各个项目:
char** files = malloc(sizeof(char*) * max_files);
for (int x = 0; x < max_files; x++ ) {
files[x] = malloc(12); // name+dot+digits+'\0'
sprintf(files[x], "name.%d", x);
}
此时,您可以将files
传递给功能const char **
。函数返回后,您需要释放分配的内存,如下所示:
for (int x = 0; x < max_files; x++ ) {
free(files[x]);
}
free(files);
答案 1 :(得分:1)
你需要为files
分配内存,然后在写入之前使用malloc
为它的每个元素分配,因为files
指向一些随机内存位置(因为你没有初始化它)。使用:
files = malloc( max_file * sizeof(*files)); //sizeof(*files)==sizeof(char*)
for(int i=0; i < max_file ; i++)
{
files[i] = malloc( 20 ); // Allocating some reasonable size
sprintf(files[i] , "%s,%d" , names,x); // Making the string
}
// After the use of `files[i]` and `files`, free the allocated memory:
for(int i=0; i <max_file ; i++)
free(files[i]);
free(files);