gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:30:54 27 4
gpt4 key购买 nike

#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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com