我想将指向函数的指针作为输出传递,并在函数中初始化它,以便我可以在main函数中使用它。这是我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef const struct _txmlAttribute
{
/** The namespace URL of the attribute qname, or NULL for no qualifier. */
char * ns;
} txmlAttribute;
int func(txmlAttribute* attrs, txmlAttribute** attrsarr, txmlAttribute*** arr){
int i;
txmlAttribute tattrs[] = {{"ssa"},{"ss"}};
printf("sizeof(tattrs): %d \n", sizeof(tattrs));
printf("sizeof(txmlAttribute): %d \n", sizeof(txmlAttribute));
attrs= malloc(2*sizeof(txmlAttribute));
printf("sizeof(attrs): %d \n\n", sizeof(attrs));
for(i=0;i<sizeof(tattrs)/8;i++){
printf("tattrs[%d]: %s \n", i, tattrs[i].ns);
memcpy((void*)&attrs[i],(const void*)&tattrs[i],sizeof(txmlAttribute));
}
printf("\n\n");
for(i=0;i<2;i++){
printf("attrs[%d]: %s \n", i,attrs[i].ns);
}
printf("\n\n");
printf("sizeof(attrs): %d \n\n", sizeof(attrs));
return 0;
}
main()
{
txmlAttribute*** arr;
txmlAttribute** attrsarr;
txmlAttribute* attrs;
printf("main: sizeof(attrs) : %d \n\n", sizeof(attrs));
func(attrs, attrsarr, arr);
//printf("main: attrs: %s\n",attrs[0].ns);
}
但有两个问题: 由于我已经打印了传递指针的大小,它仍然是8,而我预计是16。 2.当我想将此指针用于main时,我收到“Segmentation fault(core dumped)”错误。
我正在使用gcc来编译我的代码。
答案 0 :(得分:1)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef const struct _txmlAttribute {
char * ns;
} txmlAttribute;
int func(txmlAttribute **attrsarr) {
txmlAttribute tattrs[] = {{"ssa"},{"ss"}};
if(NULL==(*attrsarr = malloc(sizeof(tattrs))))
return 0;
memcpy((void*)*attrsarr, tattrs, sizeof(tattrs));//const !
return 1;
}
int main(){
txmlAttribute *attrsarr;
func(&attrsarr);//update const object!
printf("main: attrs1: %s\n", attrsarr[0].ns);
printf("main: attrs2: %s\n", attrsarr[1].ns);
free((void*)attrsarr);
return 0;
}