鱼C论坛

 找回密码
 立即注册
查看: 1905|回复: 4

[已解决]问题求助

[复制链接]
发表于 2022-10-4 14:57:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一道选择题
#include<stdio.h>
#include<string.h>
void fun(char *s)
{
    char a[7];
    s=a;
    strcpy(a,"look");
}
int main()
{
   char *p=NULL;
   fun(p);
   puts(p);
    return (0);
}
程序运行结果为什么选不确定的值
最佳答案
2022-10-4 15:29:24
本帖最后由 jackz007 于 2022-10-4 15:43 编辑
#include<stdio.h>
#include<string.h>

void fun(char * s)
{
        char a[7]          ;
        s = a              ;
        strcpy(a , "look") ;
}

int main(void)
{
       char * p = NULL     ;
       fun(p)              ;  // p = NULL,虽然作为参数被传入 fun(),但在 fun() 中被修改的只是 p 的副本 
       puts(p)             ;  // fun(p) 并不能改变 p ,所以,p 仍然是 NULL,执行此句程序会直接奔溃。
}
        楼主可以实际编译、运行一下这个程序
        下面的代码才可以实现楼主所说的效果
#include<stdio.h>
#include<string.h>

void fun(char ** s)
{
        static char a[7]   ; // a[] 必须定义为静态变量,否则,在函数 fun() 调用结束后,其所占内存会被即刻释放,无法看到效果。
        * s = a            ;
        strcpy(a , "look") ;
}

int main(void)
{
       char * p = NULL     ;
       fun(& p)            ; // 传入 fun() 的是指向 p 的指针,这样,fun() 对 p 的修改才可以得到保留
       puts(p)             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-4 15:08:07 | 显示全部楼层
本帖最后由 临时号 于 2022-10-4 15:14 编辑

在main函数中,你将p传入fun函数中,在fun函数中,你让s也就是main函数中的p指向a
但a并没有提前初始化,那里面有什么垃圾就给你什么垃圾,所以当然不确定啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-4 15:24:06 | 显示全部楼层
临时号 发表于 2022-10-4 15:08
在main函数中,你将p传入fun函数中,在fun函数中,你让s也就是main函数中的p指向a
但a并没有提前初始化,那里 ...

a不是被赋值为look了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-4 15:29:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-4 15:43 编辑
#include<stdio.h>
#include<string.h>

void fun(char * s)
{
        char a[7]          ;
        s = a              ;
        strcpy(a , "look") ;
}

int main(void)
{
       char * p = NULL     ;
       fun(p)              ;  // p = NULL,虽然作为参数被传入 fun(),但在 fun() 中被修改的只是 p 的副本 
       puts(p)             ;  // fun(p) 并不能改变 p ,所以,p 仍然是 NULL,执行此句程序会直接奔溃。
}
        楼主可以实际编译、运行一下这个程序
        下面的代码才可以实现楼主所说的效果
#include<stdio.h>
#include<string.h>

void fun(char ** s)
{
        static char a[7]   ; // a[] 必须定义为静态变量,否则,在函数 fun() 调用结束后,其所占内存会被即刻释放,无法看到效果。
        * s = a            ;
        strcpy(a , "look") ;
}

int main(void)
{
       char * p = NULL     ;
       fun(& p)            ; // 传入 fun() 的是指向 p 的指针,这样,fun() 对 p 的修改才可以得到保留
       puts(p)             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-4 15:34:13 | 显示全部楼层
h-b-z-d-j-s-m 发表于 2022-10-4 15:24
a不是被赋值为look了吗

先执行s=a,然后再赋值为look
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 00:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表