c-使用malloc连接字符串



这是一个使用malloc 连接字符串的程序

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char *sconcat(char *ptr1,char *ptr2);
void main()
{
char string1[20],string2[20],*ptr;
clrscr();
printf("enter string 1: ");
gets(string1);
printf("enter string 2: ");
gets(string2);
ptr=sconcat(string1,string2);
printf("output string : %s",ptr);
getch();
}
char *sconcat(char *ptr1,char *ptr2)
{
int len1,len2,i,j;
char *ptr3;
len1=strlen(ptr1);
len2=strlen(ptr2);
ptr3=(char *)malloc((len1+len2+1)*sizeof(char));
for(i=0;ptr1[i]!='';i++)
ptr3[i]=ptr1[i];
j=i;i=0;
for(;ptr2[j]!='';j++,i++)
ptr3[j]=ptr2[i];
ptr3[j]='';
return(ptr3);
}
output:
enter string 1 : this program does
enter string 2 : not give output
output string : this program does 

连接字符串需要进行哪些更正。当我在void main()之后使用char string1[20],string2[20],*ptr;时,

output:
enter string 1 : is this 
enter string 2 : correct ?
output string : correct? ?

第二个for循环中的测试不正确;它应该是ptr2[i] != ''而不是ptr2[j] != ''

关于代码的几点备注:

  • 不要强制转换malloc的返回值
  • 根据定义,sizeof(char)是1,因此乘以sizeof(char)只会使代码更难读取
  • sconcat的参数声明为const char *,因为它们不会修改接收到的字符串
  • malloc可以返回NULL;您必须在程序中处理这种情况,例如显示错误消息并退出
  • gets是不安全的,如果用户输入的字符数超过分配的字符数,它将使程序崩溃。将gets(string)替换为fgets(string, sizeof(string), stdin),并去掉后面的换行符
  • clrscr()getch(),以及臭名昭著的<conio.h>报头,不是标准C,并且是不可移植的;在像这样的简单程序中避免它们

您可以更简单地使用strcat

printf("enter string 1: ");
gets(string1);
printf("enter string 2: ");
gets(string2);
strcat(string1,string2);

但是,它会更改string1,因此您可能也想使用strcpy(将string1复制到另一个字符串,然后返回)。

相关内容

  • 没有找到相关文章

最新更新