指针这样赋值可以吗

指针变量赋值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,这是为什么啊,问题出在哪了啊
展开
 我来答
阔海的账户
2012-04-16 · TA获得超过214个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:240万
展开全部
这个函数的问题在于,函数接收的参数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);
}
小何才露尖尖角儿
2012-04-16 · TA获得超过362个赞
知道小有建树答主
回答量:344
采纳率:0%
帮助的人:385万
展开全部
你要在函数里面修改变量的值,应该传变量的地址或者引用。你现在是传值进来,形参的改变是不会影响实参的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jsfjsf25210
2012-04-16 · TA获得超过123个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:137万
展开全部
这样可以的 。 我刚才试过了 ,可以成功输出。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式