上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 萌王利姆露 - 

c语言基础问题

[复制链接]
  • TA的每日心情
    开心
    2023-1-5 19:44
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    14

    主题

    39

    回帖

    74

    积分

    初级工程师

    积分
    74

    新人报道油中2周年

    发表于 2023-2-6 21:00:30 | 显示全部楼层 | 阅读模式
    悬赏1油猫币未解决
    #include<stdio.h>
    
    #define N 50
    
    char* Link(char *s,char *t)
    {
        char string[N * 2];
        int i = 0;
        for (; *(s + i) != '\0'; i++)
        {
            string[i] = *(s + i);
        }
        for (int j = i + 1,k = 0; *(t + i) != '\0'; j++, k++)
        {
            string[j] = *(t + k);
        }
        return string;
    }
    int main()
    {
        char s[N] = {'\0'}, t[N] = { '\0' }, *string[N * 2];
        printf("Please input the first string:");
        gets(s);
        printf("Please input the second string:");
        gets(t);
        *string = Link(s, t);
        printf("The linked string is:");
        puts(string);
        return 0;
    }

    图片.png
    功能是拼接两个字符串,但是最后打印出来是乱码,真是搞不懂哦

    键盘敲烂,月薪过万!!!
  • TA的每日心情
    开心
    2024-7-16 15:40
  • 签到天数: 276 天

    [LV.8]以坛为家I

    115

    主题

    460

    回帖

    997

    积分

    荣誉开发者

    积分
    997

    荣誉开发者油中2周年卓越贡献生态建设者油中3周年

    发表于 2023-2-6 22:14:30 | 显示全部楼层
    这是学校的作业吗
    接脚本定制
    I frequently record, because want to leave something.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4195

    回帖

    4060

    积分

    管理员

    积分
    4060

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-2-6 22:20:12 | 显示全部楼层
    string = *(s + i);

    槽点太多,让我们有请 @李恒道
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2023-2-6 23:38:08 | 显示全部楼层
    char* Link(char *s,char *t)
    {
        char *string = (char *) malloc(strlen(s) + strlen(t));
        int i = 0;
        for (; *(s + i) != '\0'; i++)
        {
            string[i] = *(s + i);
        }
        for (int j = 0; *(t + j) != '\0'; j++)
        {
            string[j+i] = *(t + j);
        }
        return string;
    }
    可以试试这个
    最好贴出来报错
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-2-7 00:40:16 | 显示全部楼层
    int j = i + 1 这句错了吧,上面for循环结束的时候i已经是+1的状态了,再+1会造成中间跳过了一个字符,所以变乱码了。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-30 08:28
  • 签到天数: 157 天

    [LV.7]常住居民III

    7

    主题

    68

    回帖

    176

    积分

    荣誉开发者

    积分
    176

    新人报道荣誉开发者油中2周年

    发表于 2023-2-7 01:54:01 | 显示全部楼层
    本帖最后由 Vikrant 于 2023-2-7 02:24 编辑

    童鞋,你的代码好像槽点有一点多欸~~

    哈哈,不过不怕,我给你指出来( ´・・)ノ(._.`):

    1. 也是我认为最大的一个槽点,你的Link函数返回了一个函数内部定义的字符串指针,这样指针直接虚空索敌了。建议使用全局指针(bushi) (划掉)……建议直接给函数传入目标指针。或者也可以给函数内部定义的指针使用static关键字,这样函数退出的时候就不会释放这部分内存啦~ 当然了,也可以给内部的指针使用malloc、calloc、realloc等函数动态分配的内存,但是!千万记住!一定要用完了以后释放掉!(这个是血的教训~( TロT)σ )

    2. 你在main函数里定义了一个char *string[N * 2],我知道你这里想定义一个char* ,但事实上数组名是指针,又套上一个指针定义,这里的类型是char** 。建议改成char string[N * 2]。

    3. for (int j = i + 1,k = 0; *(t + i) != '\0'; j++, k++),这里面有什么问题呢?首先,应该是int j=i,不用+1。然后,你的循环判断条件是*(t + i)!='\0',这里面没有一个值会在循环时改变,这可能会死循环(你这里没有死循环时因为刚好*(t + i)=='\0'),这里应该是*(t + k)!='\0'

    4. 呐,还有!字符串的末尾最好补上一个'\0',这样稳妥一点,虽然好像不加也没有出错欸ㄟ( ▔, ▔ )ㄏ……

    下面是我改的代码,可以正常运行哦(* ̄3 ̄)╭

    1. #include <stdio.h>
    2. #define N 50

    3. char *Link(char *s, char *t, char *string) {
    4.         int i = 0;
    5.         for (; *(s + i) != '\0'; i++) {
    6.                 string[i] = *(s + i);
    7.         }
    8.         int j = i;//既然你上面写外面,那我也这样写喽~ 绝对不是我想把j的作用域移出来。
    9.         for (int k = 0; *(t + k) != '\0'; j++, k++) {
    10.                 string[j] = *(t + k);
    11.         }
    12.         string[j] = '\0';
    13. }
    14. int main() {
    15.         char s[N] = {'\0'}, t[N] = {'\0'}, string[N * 2];
    16.         printf("Please input the first string:");
    17.         gets(s);
    18.         printf("Please input the second string:");
    19.         gets(t);
    20.         Link(s, t, string);
    21.         printf("The linked string is:");
    22.         puts(string);
    23.         return 0;
    24. }
    复制代码



    人情似纸张张薄,世事如棋局局新。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-5 19:44
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    14

    主题

    39

    回帖

    74

    积分

    初级工程师

    积分
    74

    新人报道油中2周年

    发表于 2023-2-7 09:44:47 | 显示全部楼层
    Vikrant 发表于 2023-2-7 01:54
    童鞋,你的代码好像槽点有一点多欸~~

    哈哈,不过不怕,我给你指出来( ´・・)ノ(._.`):

    哥哥太强了叭好扎实的基本功
    键盘敲烂,月薪过万!!!
    回复

    使用道具 举报

    发表回复

    本版积分规则

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