实验9 3149 错在哪里

img


#include <stdio.h>
#include <stdlib.h>
// write your code here
void Strcat(char *s1, char *s2);
int main()
{
    char str1[200];
    char str2[100];
    gets(str1);
    gets(str2);
    Strcat(str1, str2);
    return 0;
}
void Strcat(char *s1,char *s2)
{   char *s=s1;
    while(*s1!='\0')
      s1++;
  s1--;
    while((*s1=*s2)!='\0')
     {s1++;s2++;}
    printf("%s\n",s);
}

改动处见注释,供参考:

#include <stdio.h>
#include <stdlib.h>
// write your code here
void Strcat(char *s1, char *s2);
int main()
{
    char str1[200];
    char str2[100];
    gets(str1);
    gets(str2);
    Strcat(str1, str2);
    printf("%s\n",str1); //修改

    return 0;
}
void Strcat(char *s1,char *s2)
{   char *s=s1;
    while(*s1!='\0')
      s1++;
    //s1--;       修改
    while((*s1=*s2)!='\0')
     {s1++;s2++;}
    *s1='\0';   //修改
    //printf("%s\n",s); 修改
}

把 s-- 去掉,参考如下修改:

#include <stdio.h>
#include <stdlib.h>
// write your code here
void Strcat(char *s1, char *s2);
int main()
{
    char str1[200];
    char str2[100];
    gets(str1);
    gets(str2);
    Strcat(str1, str2);
    return 0;
}
void Strcat(char *s1,char *s2)
{   
    char *s=s1;
    while(*s1!='\0')
       s1++;
    // s1--;
    while((*s1=*s2)!='\0')
    {
        s1++;
        s2++;
    }
    printf("%s\n",s);
}
  • 慎重使用gets()函数,gets()函数不是很安全,它不检查输入字符串的长度,可能导致缓冲区溢出。可以使用fgets()函数代替

  • 你的Strcat函数中输入字符串最好用一下const char类型,你又不修改输入字符串。

  • 边界处理有问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Strcat(char* dest, const char* src);

int main()
{
    char str1[200];
    char str2[100];
    fgets(str1, sizeof(str1), stdin);
    fgets(str2, sizeof(str2), stdin);
    Strcat(str1, str2);
    printf("%s", str1);
    return 0;
}

void Strcat(char* dest, const char* src)
{
    // 将指针移动到目标字符串的末尾
    while (*dest != '\0')
    {
        dest++;
    }
    
    // 将源字符串复制到目标字符串中
    while (*src != '\0')
    {
        // 检查缓冲区溢出
        if (dest >= (dest + sizeof(dest) - strlen(src) - 1))
        {
            fprintf(stderr, "Error: Destination string overflow\n");
            exit(EXIT_FAILURE);
        }
        
        *dest = *src;
        dest++;
        src++;
    }
    
    // 在字符串末尾添加空字符
    *dest = '\0';
}