c 的问题

yangniao 2017-09-16 11:38:38
问题是这样的
有两个文件,
在a.c文件中申请了一个地址空间,然后把地址传递到b.c文件中的一个函数中,在b.c这个文件函数中,把地址空间的值更该, 然后a.c 这个里边可以拿到这个值

部分代码如下


//a.c
char *p=malloc(sizeof(char));
p="aaaa";

//b.c
//把a.c文件中p的地址传递给下边函数的notused这个参数
static int callback_text(void *notused,int argc,char **argv,char **azcolname)
{
char *item="NULL";
*((char *)notused=argv[0]?argv[0]:item;
printf("ss--->%p,%s\n",notused,*((char *)notused));
return 0;
}


这样写出的结果是一个乱码
...全文
213 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-09-18
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
自信男孩 2017-09-18
  • 打赏
  • 举报
回复
static int callback_text(void *notused,int argc,char **argv,char **azcolname)
{
   char *item="NULL";
    *((char *)notused=argv[0]?argv[0]:item;
    if (argv[0])
        strcpy(notused, argv[0]);
    else
        strcpy(notused, item);
   printf("ss--->%p,%s\n",notused,*((char *)notused));
    return 0;
}
paschen 2017-09-17
  • 打赏
  • 举报
回复
你参数是按值传递的,只能更改指针指向的内容,更改指针本身没有效果
  • 打赏
  • 举报
回复
首先在a.c里面的这一句 p="aaaa"; 已经改了p的值了。 这一句,也不用这么崎岖: *((char *)notused=argv[0]?argv[0]:item; 直接 notused = argv[0]?argv[0]:item;就好了。 用printf输出的时候,也只要这样就好了 printf("%s", (char*)notuse);
AlbertS 2017-09-16
  • 打赏
  • 举报
回复
你把p又指向了一个常量的位置,函数返回当然出错了,你应该在修改p指向内存的值,不能p="aaaa";这样做 可以这样

char *p=malloc(sizeof(char) * 32);
strcpy(p, "aaaaaa");
但是要注意内存的释放,否则会造成内存泄露!

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧