这是一个使用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]!='\0';i++)
ptr3[i]=ptr1[i];
j=i;i=0;
for(;ptr2[j]!='\0';j++,i++)
ptr3[j]=ptr2[i];
ptr3[j]='\0';
return(ptr3);
}
output:
enter string 1 : this program does
enter string 2 : not give output
output string : this program does
连接字符串需要进行哪些更正。我在char string1[20],string2[20],*ptr;
之后使用void main()
,
output:
enter string 1 : is this
enter string 2 : correct ?
output string : correct? ?
答案 0 :(得分:4)
第二个for
循环中的测试不正确;它应该是ptr2[i] != '\0'
,而不是ptr2[j] != '\0'
。
关于代码的几点评论:
malloc
. sizeof(char)
为1,因此乘以sizeof(char)
只会使代码难以阅读。sconcat
的参数声明为const char *
,因为他们没有修改他们收到的字符串。malloc
可以返回NULL;你必须在你的程序中处理这种情况,例如通过显示错误消息并退出。gets
不安全,如果用户输入的字符多于分配的字符数,则会导致程序崩溃。将gets(string)
替换为fgets(string, sizeof(string), stdin)
,并删除尾随换行符。clrscr()
和getch()
以及臭名昭着的<conio.h>
标头不是标准C且不可移植;在像这样的简单程序中避免使用它们。答案 1 :(得分:3)
您可以更简单地使用strcat
printf("enter string 1: ");
gets(string1);
printf("enter string 2: ");
gets(string2);
strcat(string1,string2);
然而,它会更改string1
,因此您可能也想使用strcpy
(将string1
复制到另一个字符串,然后将其返回)。