C指针,太细了
观察如下代码输出结果,有什么问题,如何修改:
#include <bits/stdc++.h>
void getmem(char *p){
p = (char*)malloc(100);
}
int main ()
{
char *str=NULL;
getmem(str);
strcpy(str,"sss sss");
printf("%s",str);
return 0;
}
如果说输出sss sss那就大错特错了!!!!
要始终记住一点,指针也是变量的一种!!!!!
所以str赋值给p是把str存的地址给p,p也存str的内容,但他俩毫无关联,因此修改p,不会改变str,str为空。程序发生段错误,即内存错误。
正确写法如下:
#include <iostream>
#include <list>
#include <string.h>
#include <bits/stdc++.h>
void getmem(char **p){
*p = (char*)malloc(100);
memset(*p,'\0',100);
}
int main ()
{
char *str=NULL;
getmem(&str);
strcpy(str,"sss sss");
printf("%s",str);
return 0;
}