内存安全1.下面的C程序是否存在问题如果存在问题如何在不破坏代码结构的前提下修改#include stdio.h #include stdlib.h #include string.h void getMemory(char *p,unsigned int size) { p (char *)malloc(size); } int main() { char *strNULL; getMemory(str,100); strcpy(str,Hello World!); printf(str); free(str); return 0; }先直接丢给编译器编译一下试试出现了内存问题。这是因为getMemory方法错误的使用了值传递方式分配内存当函数执行完成之后p分配的内存自动被释放了。正确写法示例#include stdio.h #include stdlib.h #include string.h void getMemory(char **p, unsigned int size) { if (p NULL) return; *p (char *)malloc(size); if (*p NULL) { // 处理内存分配失败 return; } } int main() { char *str NULL; getMemory(str, 100); if (str ! NULL) { strcpy(str, Hello World!); printf(%s, str); free(str); str NULL; } return 0; }字节序如何用最简单的C语言代码判断处理器的字节序#include stdio.h int main(int argc,char *argv[]) { int i1; char *c(char *)i; if(*c1) printf(Little Endian\n); else printf(Big Endian\n); }字节序是多字节数据的内存存储顺序代码通过char*指针仅读取 int 变量的第一个低地址字节判断该字节的值(char *)i强制转换指针类型将 4 字节的 int “拆成” 1 字节读取聚焦低地址字节低地址字节为 1→小端序为 0→大端序。