#include<stdio.h> int main(){ int n,m,i; printf("Please input n and m:\n"); scanf("%d%d",&n,&m); char str1[20],str2[40],*p; gets(str1); p=&str1[m-1]; for(i=0;i<n-m+1;i++,p++) str2[i]=*p; puts(str2); return 0; }这段代码有什么错误
时间: 2023-12-10 17:39:44 浏览: 78
这段代码有以下错误:
1. 在输入完n和m后,使用`gets()`函数读入字符串,但是`gets()`函数会读取上一个输入留下的"\n",导致字符串输入不完整。
2. 字符串`str2`没有以'\0'结尾,会导致输出结果出错。
3. `str2`没有初始化,可能会输出一些无法预测的结果。
修正后的代码如下:
```c
#include <stdio.h>
#include <string.h>
int main() {
int n, m, i;
printf("Please input n and m:\n");
scanf("%d%d", &n, &m);
getchar(); // 读取上一个输入留下的"\n"
char str1[20], str2[20];
fgets(str1, sizeof(str1), stdin); // 使用fgets()函数读入字符串
str1[strlen(str1)-1] = '\0'; // 去掉fgets()读入的换行符
char *p = &str1[m-1];
for (i = 0; i < n-m+1 && *p != '\0'; i++, p++)
str2[i] = *p;
str2[i] = '\0'; // 加上结尾符
puts(str2);
return 0;
}
```
注意:
1. 使用`fgets()`函数读入字符串时,需要指定最大读入长度,并在读入后手动添加字符串结尾符`\0`。
2. 在遍历字符串时,需要判断是否已经到达字符串结尾。
阅读全文