#include<stdio.h>
#include<string.h>
#include<fstream>
#include<malloc.h>
#pragma warning(disable : 4996)
typedef struct pre_load{
char *pre_ip;
int data2;
char data3;
}pre_load;
int a(pre_load pre){
char *test;
test = (char*)calloc(1, 256);
strcpy(test, "test127.0.0.0.1");
pre.pre_ip = (char*)calloc(1, 256);
strcpy(pre.pre_ip, test);
return 0;
};
int main(){
pre_load pre;
pre.pre_ip = (char*)calloc(1, 256);
a(pre);
printf("%s", pre.pre_ip);
system("pause");
}
我添加此功能来测试项目
为什么没有任何错误我什么都没有? 这让我困惑了很长时间。 我想我应该再次研究一下指针。
答案 0 :(得分:2)
int a(pre_load pre)
您按值传递pre
,因此您在函数a
中修改的任何内容都不会影响pre
中的main
。相反,声明函数传递指针:
void a(pre_load *pre){
char *test = calloc(1, 256);
strcpy(test, "test127.0.0.0.1");
pre->pre_ip = calloc(1, 256);
strcpy(pre->pre_ip, test);
free(test);
};
并将其传递给main
:
pre_load pre;
a(&pre);
请注意,原始代码中存在内存泄漏。