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

标签 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 函数的原型(prototype)..

最佳答案

通过查看您的代码,我可以说您正在使用 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 岁以后的计算机生成代码的。最好使用新的编译器,如果有,您可以找到更多帮助和支持你会的。

关于c - 使用 C 连接两个字符串的数据结构程序中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22869355/

相关文章:

algorithm - 特殊的二叉树,一个棘手的问题?

java - 红黑树自顶向下删除算法

c - 尽管从 fopen() 获得成功,但无法读取 C 中的文件

c - 在这种情况下如何使用负零?

python - 如何查找固定字符串周围的匹配项

java - 通过迭代将字符串数组添加到二维字符串数组

java - 为什么我们需要HashMap以外的数据结构

c - 在 C 中处理多维数组的列

c# - 创建 C .dll 并在 C# 中使用它

python - Pandas 数字格式,带括号的负数