1.为什么指向自定义结构的指针在该代码中不起作用?
1.为什么我会在p-〉x = x这行得到警告呢?
1.为什么我会得到第二个警告与strcpy_s一致?
#include <stdlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef struct sptr {
int x;
char* s;
struct sptr* next;
} ptr;
void add(ptr* p, int x, const char* s) {
ptr* o = p;
p = (ptr*) malloc(sizeof(ptr));
p->x = x; // warning
p->s = (char*)malloc(20 * sizeof(char));
strcpy_s(p->s, 20, (char*)s); // warning
p->next = o;
}
void show(ptr* p) {
ptr* o = p;
while (o != NULL) {
printf("%d %s\n", o -> x, o -> s);
o = o->next;
}
}
int main() {
ptr* p = NULL;
add(p, 5, "xcvxvxv");
add(p, 7, "adadad");
show(p);
return 0;
}
2条答案
按热度按时间qjp7pelc1#
指针是值。
add
正在接收NULL指针值的 * 副本 *。将add
中的局部变量p
更改为malloc
返回的新指针值不会更改main
中单独的局部变量p
。就像要在调用者的作用域中更改
int
的值一样,可以使用int *
参数:在调用方的作用域中更改
int *
的值将需要int **
参数。这可以扩展到任何类型。
malloc
可以 * 失败 *,并返回NULL
。在NULL指针值上执行indirection是Undefined Behaviour。必须通过检查
malloc
的返回值来防止这种情况的发生。ecbunoof2#
1.为什么指向自定义结构的指针在该代码中不起作用?
待定
1.为什么我会在p-〉x = x这行得到警告呢?
1.为什么我会得到第二个警告与strcpy_s一致?
发生2个警告,因为程式码取消指涉
malloc()
的指标,而没有先检查指标是否可能是NULL
。