鱼C论坛

 找回密码
 立即注册
查看: 1384|回复: 2

打印

[复制链接]
发表于 2023-10-8 20:59:52 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
char * mstrcat(char*destination, char*source)

{
    if (destination ==NULL )
    {
        return NULL;
    }
    if (source == NULL)
        return destination;
    char * rar = destination;
    while(*destination != '\0')
    {
        destination++;
    }
    while(*source!= '/0')
    {
        *destination = *source;
        destination++;
        source++;
    }
    *destination = '\0';

    return rar;
}

int main(void)
{
    char* in =mstrcat("abc","def");
    printf ("nihao");
    printf("%s",*in);
    printf ("mina");
    return 0;
}

为什么这段代码在codeblocks运行没反应,也没打印出东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-8 21:00:20 | 显示全部楼层
这段代码存在几个问题:

1.  while(*source!= '/0') 应该是 while(*source!= '\0') ,表示当 source 指向的字符不是字符串结束符时,继续执行循环。

2.  char* in =mstrcat("abc","def"); 这句代码的问题在于, "abc" 和 "def" 是常量字符串,不能直接修改。应该先定义两个字符数组,再将它们传递给 mstrcat 函数。

3.  printf("%s",*in); 应该是 printf("%s",in); ,因为 in 已经是一个指向字符数组的指针,不需要再使用解引用符号 * 。

修改后的代码如下:
#include <stdio.h>
#include <string.h>

char * mstrcat(char* destination, char* source)
{
    if (destination == NULL)
    {
        return NULL;
    }
    if (source == NULL)
        return destination;
    char * rar = destination;
    while (*destination != '\0')
    {
        destination++;
    }
    while (*source != '\0')
    {
        *destination = *source;
        destination++;
        source++;
    }
    *destination = '\0';

    return rar;
}

int main(void)
{
    char str1[20] = "abc";
    char str2[20] = "def";
    char* in = mstrcat(str1, str2);
    printf("nihao");
    printf("%s", in);
    printf("mina");
    return 0;
}

运行结果为: nihaodefmina
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-8 21:01:06 | 显示全部楼层
你的代码存在一些问题,导致在运行时没有输出结果。下面是我对你的代码进行的修改和解释:
#include <stdio.h>char* mstrcat(char* destination, const char* source) {    if (destination == NULL) {        return NULL;    }    if (source == NULL) {        return destination;    }    char* rar = destination;    while (*destination != '\0') {        destination++;    }    while (*source != '\0') { // 修正字符串结束标志的错误        *destination = *source;        destination++;        source++;    }    *destination = '\0';    return rar;}int main(void) {    char destination[100] = "abc"; // 声明足够大的目标字符串数组    const char* source = "def";    char* in = mstrcat(destination, source);    printf("nihao ");    printf("%s", in);    printf(" mina\n");    return 0;}
代码修改解释如下:

1. 修正了函数定义中的参数类型,将char* source改为const char* source,以便传入常量字符串。
2. 在main函数中,需要声明一个足够大的目标字符串数组destination,以存储连接后的结果。
3. 将printf语句进行了分行处理,使用\n表示换行。

请注意,在调用mstrcat函数时,我们将目标字符串数组destination作为第一个参数,并将源字符串"def"作为第二个参数传入。然后,我们使用printf输出结果。确保目标字符串数组足够大以容纳连接后的结果。

希望这样解答能帮到你!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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