指针这样赋值可以吗
指针变量赋值NULL后,再分配内存,再以图中的这样方式赋值,可以吗,他调用时不能输出正确的字符串值,不知道原因在哪,谁能解释下,谢谢大家了他的调用方式是:intmain(...
指针变量赋值NULL后,再分配内存,再以图中的这样方式赋值,可以吗,他调用时不能输出正确的字符串值,不知道原因在哪,谁能解释下,谢谢大家了
他的调用方式是:
int main()
{
char *ptr=NULL;
get_str(ptr);
if(ptr)
printf("%s",ptr);
else
printf("%p\n",ptr);
return 0;
}
输出的结果是“00000000”;不是testing,这是为什么啊,问题出在哪了啊 展开
他的调用方式是:
int main()
{
char *ptr=NULL;
get_str(ptr);
if(ptr)
printf("%s",ptr);
else
printf("%p\n",ptr);
return 0;
}
输出的结果是“00000000”;不是testing,这是为什么啊,问题出在哪了啊 展开
展开全部
这个函数的问题在于,函数接收的参数p,并不是最终能够获得字符串的p。传递的指针类型的参数,是用来改变其指向内容的,而指针本身的值不会改变。所以在这个函数中,给p分配的内存,使p指向这段内存的首地址,但调用者传入的p这个参数本身并没有改变,如果原来是NULL,那么函数调用返回后,这个p还是NULL,会出现访问异常。
解决这个问题有多个办法:
第一种办法: 要先给p分配好内存,再调用函数。在函数中不能进行内存分配操作。
第二种办法: 还有就是函数将分配的地址返回出来,在函数中分配内存,供调用者使用。
第三种办法: 就是将函数指针的指针传入函数,在函数中分配内存。
以下是三种方法的示例,仅供参考:
第一种办法:
#include <stdio.h>
#include <string.h>
void get_str(char *p)
{
strcpy(p,"testing");
}
void main()
{
char *p;
p = (char *)malloc(256);
get_str(p);
printf("the string: %s \n",p);
}
第二种办法:
#include <stdio.h>
#include <string.h>
char* get_str()
{
char * p;
p = (char *)malloc(sizeof("testing"));
strcpy(p,"testing");
return p;
}
void main()
{
char *p;
p = get_str();
printf("the string: %s \n",p);
}
第三种办法:
#include <stdio.h>
#include <string.h>
void get_str(char **p)
{
*p = (char *)malloc(sizeof("testing"));
strcpy(*p,"testing");
}
void main()
{
char *p;
get_str(&p);
printf("the string: %s \n",p);
}
解决这个问题有多个办法:
第一种办法: 要先给p分配好内存,再调用函数。在函数中不能进行内存分配操作。
第二种办法: 还有就是函数将分配的地址返回出来,在函数中分配内存,供调用者使用。
第三种办法: 就是将函数指针的指针传入函数,在函数中分配内存。
以下是三种方法的示例,仅供参考:
第一种办法:
#include <stdio.h>
#include <string.h>
void get_str(char *p)
{
strcpy(p,"testing");
}
void main()
{
char *p;
p = (char *)malloc(256);
get_str(p);
printf("the string: %s \n",p);
}
第二种办法:
#include <stdio.h>
#include <string.h>
char* get_str()
{
char * p;
p = (char *)malloc(sizeof("testing"));
strcpy(p,"testing");
return p;
}
void main()
{
char *p;
p = get_str();
printf("the string: %s \n",p);
}
第三种办法:
#include <stdio.h>
#include <string.h>
void get_str(char **p)
{
*p = (char *)malloc(sizeof("testing"));
strcpy(*p,"testing");
}
void main()
{
char *p;
get_str(&p);
printf("the string: %s \n",p);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询