使用C连接两个字符串的数据结构程序中的错误

时间:2014-04-04 17:33:29

标签: c string data-structures concatenation turbo-c

#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函数的原型..

1 个答案:

答案 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年的计算机生成代码。最好使用新的编译器,如果有更好的帮助和支持,你可以找到更多的帮助和支持。你这样做。