从两个变量创建双const指针

时间:2015-05-10 11:14:53

标签: c pointers

我有一个以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.1a.2a.3a.4等文件列表。

如何创建这样的双指针?我的名称(如上面的a.5a)和文件计数(例如const char*12 ...作为{{1} })在两个不同的变量中。

我已经尝试声明3采用unsigned int循环直到达到const char**并使用for在循环中连接,但它不起作用。< / p>

file_count max

2 个答案:

答案 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);