改正#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 17:47:55 浏览: 86
改正:
```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;
}
阅读全文