鱼C论坛

 找回密码
 立即注册
查看: 2150|回复: 9

不知道函数strcpy错在哪?

[复制链接]
发表于 2020-8-28 19:57:56 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 流泪的鳄鱼 于 2020-8-28 20:06 编辑

运行之后没有任何显示,printf(str);作用没有体现出来,为什么?
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[])

{
   
        char test();
       
}
void get(char*p)
{
        p=(char*)malloc(100);
}
char test(void)
{
        char *str=NULL;
        get(str);
        strcpy(str,"hello world");
        printf(str);
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-28 20:04:24 | 显示全部楼层
本帖最后由 sunrise085 于 2020-8-28 20:15 编辑

动态生成空间,不是这样用的。
printf用法也不对
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void test(void);
char* get(char*p);
int main(int argc, char *argv[]) 

{
    int i;
    test(); 
        
}
char* get(char*p)
{
    p=(char*)malloc(100);
    return p;
}
void test(void)
{

    char *str=NULL;
    str=get(str);
    strcpy(str,"hello world");
    printf("%s",str);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:05:12 | 显示全部楼层
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void get(char *p);
void test();
int main(int argc, char *argv[])
{
        int i;
        test();
}
void get(char **p) {
        *p = (char*) malloc (sizeof(char) * 100);
}
void test(void) {
        char *str = NULL;
        get(&str);
        strcpy(str,"hello world");
        printf(str);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:12:54 | 显示全部楼层
函数有定义,没有声明。

三楼的程序应该没有问题了(在上班,没办法。我是猜测,没有上机测试)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:13:13 | 显示全部楼层
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *get(char *p);
void test();

int main(int argc, char *argv[])
{
        int i;
        test();
}
char *get(char *p) 
{
        p = (char*) malloc (100);
        return p; 
}
void test(void) 
{
        char *str = NULL;
        str = get(str);
        strcpy(str,"hello world");
        printf(str);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:14:05 | 显示全部楼层
本帖最后由 baige 于 2020-8-28 20:40 编辑

https://www.cnblogs.com/rixiang/p/9183873.html
指针作为参数也是值传递,在函数中将参数复制一份而已。指向的是同一块内存地址。假设参数传的是int *p,函数内copy的是int *p_1。在函数中操作*p_1,例如*p_1 = 1, 则p_1所指向的内容就变成了1.,由于他们是指向同一块地址,所以即使他们不是同一个指针*p所指向的内容也会被改变。
但如果让p_1指向其他的内存地址,则由于是值传递,p并不会因此而改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:20:40 | 显示全部楼层
printf(str);
这样的做法居然不报错,我觉得可能等同于printf("Hello World!");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:42:45 | 显示全部楼层
风过无痕1989 发表于 2020-8-28 20:12
函数有定义,没有声明。

三楼的程序应该没有问题了(在上班,没办法。我是猜测,没有上机测试)

函数不声明也没问题的8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 20:47:01 | 显示全部楼层
本帖最后由 baige 于 2020-8-28 20:51 编辑
qiuyouzhi 发表于 2020-8-28 20:42
函数不声明也没问题的8


以主函数调用函数为例,如果被调用的函数定义在主函数之后,并且没有声明,这时编译器就会报错
至于楼主的代码为什么没有报错,看主函数的这一句,char test(); 它并没有去调用函数,而是定义一个变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-28 22:22:43 | 显示全部楼层
baige 发表于 2020-8-28 20:47
以主函数调用函数为例,如果被调用的函数定义在主函数之后,并且没有声明,这时编译器就会报错
至于楼 ...

我知道,但TA表达的意思不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 03:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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