C 使用指向字符数组的指针
我想传递一个指向函数指针的指针,在函数中分配内存,用字符串填充它,然后把它取回来,但这一切似乎都不起作用。程序在函数外不打印任何内容。有一些最重要的代码:C 使用指向字符数组的指针,c,pointers,C,Pointers,我想传递一个指向函数指针的指针,在函数中分配内存,用字符串填充它,然后把它取回来,但这一切似乎都不起作用。程序在函数外不打印任何内容。有一些最重要的代码: struct record ** getRegEx( int *counter, char** keys ) { *counter = 0; //get some records, its number is *counter, max lenght of each string is 64 //COUNTER IS N
struct record ** getRegEx( int *counter, char** keys )
{
*counter = 0;
//get some records, its number is *counter, max lenght of each string is 64
//COUNTER IS NOT 0! ITS VALUE DEPENDS ON OTHER OPERATIONS I HAVENT WRTTEN HERE
//...
keys =(char ** ) malloc((*counter)*(sizeof(char *)));
for (j = 0; j < *counter; j++)
{
keys[j] = (char* )malloc(64*sizeof(char));
}
strcpy(keys[j],key.dptr);
printf("size %d : \n", sizeof(**keys));//1
printf("size %d : \n", sizeof(*keys));//4
printf("size %d : \n", sizeof(keys[0]));//4
printf("size %d : \n", sizeof(keys));//4
//...
}
/*Out of the function, inside the function OK*/
char** keys;
int count;
results = getRegEx(&count, &keys); //&keys or keys - makes no difference
for(int k=0 ; k< *count;k++) //test
{
printf("keys in db %s: s\n", keys[k]); //nothing!?
}
struct record**getRegEx(int*计数器,字符**键)
{
*计数器=0;
//获取一些记录,其编号为*计数器,每个字符串的最大长度为64
//计数器不是0!它的值取决于我在这里没有写过的其他操作
//...
keys=(char**)malloc((*计数器)*(sizeof(char*));
对于(j=0;j<*计数器;j++)
{
键[j]=(char*)malloc(64*sizeof(char));
}
strcpy(键[j],键.dptr);
printf(“大小%d:\n”,大小(**键));//1
printf(“大小%d:\n”,大小(*键));//4
printf(“大小%d:\n”,大小(键[0]);//4
printf(“大小%d:\n”,大小(键));//4
//...
}
/*函数外,函数内OK*/
字符**键;
整数计数;
结果=getRegEx(&count,&keys)//&钥匙或钥匙-没有区别
对于(int k=0;k<*count;k++)//测试
{
printf(“数据库中的键%s:s\n”,键[k]);//什么都没有!?
}
我用类似于
struct record**getRegEx(int*counter,char***keys)
的东西替换函数头(并在函数中使用*keys和*keys[I]而不是key和keys[I]),从而实现了这一功能。谢谢大家 您正在将零传递给malloc
,因此在键中没有可返回的内容
您的for
循环永远不会运行
这两种情况都是因为(*计数器)
为零。您正在将零传递给malloc
,因此您在键中没有要返回的内容
您的for
循环永远不会运行
两者都是因为(*计数器)
为零。您有一个函数getRegEx
,该函数被声明为返回一个结构记录**
你知道这个函数缺少什么吗?
任何看起来像return
语句的内容您有一个函数getRegEx
,它被声明为返回一个结构记录**
你知道这个函数缺少什么吗?
任何看起来像return
语句的内容强>
这里有一个严重的问题:
results = getRegEx(&count, &keys); //&keys or keys - makes no difference
你的评论是错误的,它确实起了作用<代码>键
的类型为char**
(这是getRegEx
所期望的),键
的类型为char***
函数有一个返回类型,但不返回任何内容
为函数中的键
变量分配动态内存,但函数(如所写)无法将该内存从函数中传递出去。您的函数应采用字符***
,并应将其作为键
(如前所述,其类型为字符***
)
由于在函数开始时设置了*count=0
(此时不应该在函数中设置它,应该通过值而不是指针传递count
),因此大小始终为零。malloc(0)
的确切效果由实现定义
您可以强制转换malloc
的返回值。这不是错误的,但在C中是不必要的(如果你真的使用C++,你应该这么说),并且可以让事情变得更难。
您从不检查malloc
的返回值是否失败
在声明计数器的函数外部使用计数器
指针。在函数调用之外,应该使用作为参数传递的count
变量。函数参数在其使用的函数之外不会继续存在
这里有一个严重的问题:
results = getRegEx(&count, &keys); //&keys or keys - makes no difference
你的评论是错误的,它确实起了作用<代码>键
的类型为char**
(这是getRegEx
所期望的),键
的类型为char***
键
变量分配动态内存,但函数(如所写)无法将该内存从函数中传递出去。您的函数应采用字符***
,并应将其作为键
(如前所述,其类型为字符***
)*count=0
(此时不应该在函数中设置它,应该通过值而不是指针传递count
),因此大小始终为零。malloc(0)
的确切效果由实现定义malloc
的返回值。这不是错误的,但在C中是不必要的(如果你真的使用C++,你应该这么说),并且可以让事情变得更难。malloc
的返回值是否失败计数器
指针。在函数调用之外,应该使用作为参数传递的count
变量。函数参数在其使用的函数之外不会继续存在getRegEx(&count,&keys)
时,表达式&keys
的类型是char***
,而不是char**
。请注意,如果要修改键的值,必须向其传递指针。这导致了下一个问题
键的值,而不是它所指向的值,所以您在函数中所做的任何更改都不会反映在调用方中