改正#include"stdio.h" #include <cstring> int main() { char s1[80],s2[80]; gets (s1); gets (s2); printf ("lengthsf:%d %d \n",strlen(s1),strlen(s2)); if (!strcmp(s1,s2)); printf ("the strings areequal \n"); stract(s1,s2); printf("%s\n",s1); }
时间: 2024-03-03 19:47:55 浏览: 80
改正:
```c++
#include <cstdio>
#include <cstring>
int main() {
char s1[80], s2[80];
fgets(s1, 80, stdin);
fgets(s2, 80, stdin);
printf("lengths: %ld %ld\n", strlen(s1), strlen(s2));
if (!strcmp(s1, s2))
printf("the strings are equal\n");
strcat(s1, s2);
printf("%s\n", s1);
return 0;
}
```
改正说明:
1. 将头文件 `stdio.h` 改为 `<cstdio>`,头文件 `cstring` 应该已经包含在 `<string>` 中了,所以可以省略。
2. 使用 `fgets` 代替 `gets`,因为 `gets` 存在缓冲区溢出的风险。
3. 在输出字符串长度时,使用 `%ld` 代替 `%d`,因为 `strlen` 函数返回的是 `size_t` 类型,而不是 `int` 类型。
4. 将分号从 `if` 语句的末尾移除,否则 `if` 语句后面的代码总会被执行。
5. 将函数名 `stract` 改为 `strcat`。
6. 在程序末尾加上 `return 0;`,表示程序正常退出。
相关问题
1. 编一个函数,将字符串s2连接到s1后面,不用strcat函数。(请填空)#include <stdio. h> #include <string. h> void mainO ( char s1[80], s2[40]; int i=0, j=0; gets(s1) ; gets(s2) ; /*查找定位s1的连接点(即结束符) */ 8灵静话/*将s2逐个字符复制到s1后,对应下标后移*/ /*手工对s1加结束符*/ printf( "The new string is:%s” ,s1);
#include <stdio.h>
#include <string.h>
void mystrcat(char s1[], char s2[]) {
int len1 = strlen(s1);
int len2 = strlen(s2);
int i, j;
for (i = len1, j = 0; j < len2; i++, j++) {
s1[i] = s2[j];
}
s1[i] = '\0';
}
int main() {
char s1[80], s2[40];
printf("Enter string s1: ");
gets(s1);
printf("Enter string s2: ");
gets(s2);
mystrcat(s1, s2);
printf("The new string is: %s\n", s1);
return 0;
}
功能:实现两个字符串的连接。 例如:输入dfdfqe和12345时,则输出dfdfqe12345. #include <stdio.h> void scat(char *s1,char *); void main(void) char s1[80],s2[80]; gets(s1); gets(s2); scat(s1,s2); puts(s1); void scat (char s1[],char s2[]) int i=0,j=0; while(s1[i]==0) i++; while(s2[j]=='\0') ( s2[j]=s1[i]; i++; j++; s2[j]="\0';
您的代码有一些小错误,我帮您修改一下:
```c
#include <stdio.h>
void scat(char *s1,char *s2);
int main(void) { // main函数要有返回值和大括号
char s1[80],s2[80];
gets(s1);
gets(s2);
scat(s1,s2);
puts(s1);
return 0; // 返回0表示程序运行正常结束
}
void scat (char s1[],char s2[]) {
int i=0,j=0;
while(s1[i]!='\0') { // 字符串末尾是'\0'而不是0
i++;
}
while(s2[j]!='\0') { // 同上
s1[i]=s2[j];
i++;
j++;
}
s1[i]='\0'; // 最后要加上'\0'表示字符串结束
}
```
希望这个修改后的代码能够帮到您。
阅读全文