#include<stdio.h>
#include<conio.h>
#include<string.h>
void main()
{
char *s1, *s2, *s3;
int length, len1=0,len2=0, i, j;
clrscr();
s1=(char*)malloc(20* sizeof(s1));
s2=(char*)malloc(20* sizeof(s2));
printf("Enter first string\n");
gets(s1);
len1=strlen(s1);
printf("Enter second string\n");
gets(s2);
len2=strlen(s2);
length=len1+len2;
s3= (char*)malloc((length+2)* sizeof(s3));
for(i=0;i<len1;++i)
*(s3+i) =*(s1+i);
*(s3+i)=' '; /*leave a space at end of first string */
++i;
for(j=0;j<len2;++j)
{ *(s3+i)=*(s2+j); /* copying 2nd string */
++i;
}
*(s3+i)='\0'; /* store '\0' at end to set 'end of string' */
printf("Concatenated string is\n%s", s3);
getch();
}
请指出这段代码中的错误,用于连接两个字符串...... 它显示太多错误 首先它要求malloc函数的原型..
答案 0 :(得分:0)
通过查看您的代码,我可以说您使用的是Turbo-c编译器。你需要添加
你的代码中有#include<alloc.h>
。你的代码是正确的,并且在我的gcc编译器上工作正常(经过一些编译器特定的调整)。
但要学习一些要点(对不起,如果你已经了解它们): -
1)*(s1+1)=s1[1]
或*(s1+0)=s1[0]
(您可以互换使用)
2)如果你是学习者,可以使用gets()作为入门者。但要注意它不安全,因为在你的代码中你分配了20个字节的内存,这意味着你可以输入20个字符作为输入。但是,如果你输入大于20个字符怎么办? gets()函数将存储超出分配的20个字节的剩余字符。超出内存的是由程序的相邻变量使用的。在这种情况下,相邻变量是s2。因此,有可能改变其他变量的值(不知道)。尝试在s1中存储长度大于20的字符串并打印s1和s2。(你会知道我在说什么。)(这是经典问题)。请学习使用 scanset 尽快读取字符串。
3)在你忘记释放所有内存之后。
4)使用新的编译器(例如: - GCC),因为Turbo c是为现有30年的计算机生成代码。最好使用新的编译器,如果有更好的帮助和支持,你可以找到更多的帮助和支持。你这样做。