我有一个完整填充的结构。名字是strdup' d。我想要做的是,创建一个指针数组,其中数组中的元素指向strdup的变量。
这就是我的尝试:
ui-effects-wrapper
这是我的输出:
struct Student{
char *name;
int age;
}Student;
void storeAdrress(const Student *student1,char **arrayOfPointers){
arrayOfPointers[0] = student1->name;
printf("Struct variable: %p",student1->name);
printf("Pointer variable: %p",arrayOfPointers[0]);
}
int main(void){
Student *student1 = calloc(1,sizeof(Student));
student1->name = strdup("Tom");
char *arrayOfPointers[100] = {0};
storeAdrress(student1,arrayOfPointers);
free(student1->name);
free(student1);
return(0);
}
我的目标是让Struct variable: (0x5502a80)
Pointer variable: (nil)
拥有该名称的地址。这显然不起作用,因为arrayOfPointers[0]
没有存储指针位置。
有人可以告诉我我做错了什么。
答案 0 :(得分:2)
天气风向标打败了我,但是这里是对代码的补充更正,而不使用typedef
,并添加了一些错误检查:
#define _POSIX_C_SOURCE 200809L
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student{
char *name;
int age;
};
void storeAddress(struct Student * stdt, char ** pArray, size_t index)
{
pArray[index] = stdt->name;
printf("Struct variable: %p\n", (void *) stdt->name);
printf("Pointer variable: %p\n", (void *) pArray[index]);
}
int main(void)
{
struct Student *student1 = calloc(1,sizeof(*student1));
if ( !student1 ) {
perror("couldn't allocate memory for struct Student");
exit(EXIT_FAILURE);
}
student1->name = strdup("Tom");
if ( !student1->name ) {
perror("couldn't allocate memory for student name");
exit(EXIT_FAILURE);
}
char *arrayOfPointers[100] = {0};
storeAddress(student1, arrayOfPointers, 0);
free(student1->name);
free(student1);
return 0;
}
带输出:
Paul@Pauls-iMac:~/Documents/src/sandbox/names$ ./names
Struct variable: 0x7fd632403210
Pointer variable: 0x7fd632403210
Paul@Pauls-iMac:~/Documents/src/sandbox/names$
答案 1 :(得分:0)
这是对您的计划的修补。我在结构定义中添加了typedef
,我更正了使用calloc
来指定struct
大小,而不是指针大小,我添加了几个newline
s 。它为两个地址打印相同的值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Student{
char *name;
int age;
} Student;
void storeAdrress(const Student *student1,char **arrayOfPointers){
arrayOfPointers[0] = student1->name;
printf("Struct variable: %p\n", student1->name);
printf("Pointer variable: %p\n", arrayOfPointers[0]);
}
int main(void){
char *arrayOfPointers[100] = {0};
Student *student1 = calloc(1, sizeof(*student1));
student1->name = strdup("Tom");
storeAdrress(student1, arrayOfPointers);
free(student1->name);
free(student1);
return 0;
}
节目输出:
Struct variable: 00762DE0
Pointer variable: 00762DE0