bronya1465124479 2023-03-12 11:49 采纳率: 82.6%
浏览 12
已结题

不知道为什么插入串2后输出会出现乱码,希望有人能教一下要怎么修改

程序目的是为将串2插入串1某一指定位置中
不知道为什么插入串2后输出会出现乱码,希望有人能教一下要怎么修改
插入函数在35行

img

#include<stdio.h>
#include<stdlib.h>
#define MaxSize 100
#define false 0
#define true 1

typedef struct str
{
    char data[MaxSize];
    int length;
}SqString;

void InitSqString(SqString* str1, SqString* str2)
{
    str1->length = str2->length = 0;
}

void StrAssign(SqString* str1, SqString* str2,char *a,char *b)
{
    int i=0;
    while (a[i]!='\0')
    {
        str1->length++;
        str1->data[str1->length - 1] = a[i];
        i++;
    }
    i = 0;
    while (b[i] != '\0')
    {
        str2->length++;
        str2->data[str2->length - 1] = b[i];
        i++;
    }
}
int InsertStr(SqString* str1, SqString* str2, int post)
{
    if (post<0 || post-1>str1->length) {
        printf("error\n");
        return false;
    }
    int i;
    for (i = post - 1; i < str1->length; i++)
    {
        str1->data[post + str2->length] = str1->data[i];
    }
    for (i = 0; i < str2->length; i++)
    {
        str1->data[post - 1 + i] = str2->data[i];
    }
    str1->length += str2->length;
    return true;
}

void printStr(SqString *str1)
{
    int i;
    for (i = 0; i < str1->length; i++)
    {
        printf("%c", str1->data[i]);
    }
}

int main()
{
    SqString str1,str2;
    char a[10] = "abcde", b[10] = "fghij";
    int post;
    InitSqString(&str1, &str2);
    StrAssign(&str1, &str2, a, b);
    printf("please enetr postion of you want to insert\n");
    scanf_s("%d", &post);
    InsertStr(&str1, &str2, post);
    printStr(&str1);
}

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2023-03-12 12:14
    关注

    你初始化的时候,需要将字符数组所有元素初始化为0。你的代码缺少字符串结束符
    另外插入函数中,第一个for循环应该采用倒序移动,否则可能会产生字符覆盖现象,修改如下:

    
    #include<stdio.h>
    #include<stdlib.h>
    #include <string.h>
    #define MaxSize 100
    #define false 0
    #define true 1
     
    typedef struct str
    {
        char data[MaxSize];
        int length;
    }SqString;
     
    void InitSqString(SqString* str1, SqString* str2)
    {
        str1->length = str2->length = 0;
        memset(str1->data,0,MaxSize);
        memset(str2->data,0,MaxSize);
    }
     
    void StrAssign(SqString* str1, SqString* str2,char *a,char *b)
    {
        int i=0;
        while (a[i]!='\0')
        {
            str1->length++;
            str1->data[str1->length - 1] = a[i];
            i++;
        }
        i = 0;
        while (b[i] != '\0')
        {
            str2->length++;
            str2->data[str2->length - 1] = b[i];
            i++;
        }
    }
    int InsertStr(SqString* str1, SqString* str2, int post)
    {
        if (post<0 || post-1>str1->length) {
            printf("error\n");
            return false;
        }
        int i;
        for(i=str2->length-1;i>=0;i--)
        {
            str1->data[i + str2->length] = str1->data[i];
        }
        for (i = 0; i < str2->length; i++)
        {
            str1->data[post - 1 + i] = str2->data[i];
        }
        str1->length += str2->length;
        return true;
    }
     
    void printStr(SqString *str1)
    {
        int i;
        for (i = 0; i < str1->length; i++)
        {
            printf("%c", str1->data[i]);
        }
    }
     
    int main()
    {
        SqString str1,str2;
        char a[10] = "abcde", b[10] = "fghij";
        int post;
        InitSqString(&str1, &str2);
        StrAssign(&str1, &str2, a, b);
        printf("please enetr postion of you want to insert\n");
        scanf_s("%d", &post);
        InsertStr(&str1, &str2, post);
        printStr(&str1);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line