#include<stdio.h> #include<string.h> int main() { char c[100],a[100],s[100]; int i,j=0,k=0; gets(c); for(i=0; ;i++) { if(c[i]=='\n') break; if(c[i]>='0'&&c[i]<='9') { a[j]=c[i]; j++; } if(c[i]>='a'&&c[i]<='z'||c[i]>='A'&&c[i]<='Z') { s[k]=c[i]; k++; } } a[j]='\n'; s[k]='\n'; puts(a); puts(s); return 0; }有错误吗
时间: 2024-02-25 07:58:34 浏览: 18
这段代码有一个潜在的问题:如果输入的字符串中包含超过 99 个数字或字母字符,程序就会发生数组越界的错误,因为数组 `a` 和 `s` 的大小都只有 100。因此,为了更加健壮,我们应该限制输入的字符串的长度,或者使用动态内存分配来分配足够的空间。
此外,这段代码使用了 `gets` 函数来读取输入的字符串,这个函数已经被标记为不安全的函数,因为它没有限制输入的字符串长度,容易导致缓冲区溢出的问题。建议使用更为安全的输入函数 `fgets` 来替代。
下面是一份稍微改进的代码,可以更加健壮地运行:
```c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX_LEN 1000
int main() {
char c[MAX_LEN];
char *a, *s;
int i, j = 0, k = 0;
fgets(c, MAX_LEN, stdin);
a = (char *)malloc(strlen(c) * sizeof(char));
s = (char *)malloc(strlen(c) * sizeof(char));
for (i = 0; c[i] != '\0'; i++) {
if (c[i] == '\n') {
break;
}
if (c[i] >= '0' && c[i] <= '9') {
a[j] = c[i];
j++;
}
if (c[i] >= 'a' && c[i] <= 'z' || c[i] >= 'A' && c[i] <= 'Z') {
s[k] = c[i];
k++;
}
}
a[j] = '\0';
s[k] = '\0';
printf("提取的数字字符为:%s\n", a);
printf("提取的字母字符为:%s\n", s);
free(a);
free(s);
return 0;
}
```
这份代码使用了动态内存分配来动态分配足够的空间,避免了数组越界的问题。同时,使用了更为安全的输入函数 `fgets` 来读入字符串。注意,在使用动态内存分配后,需要在程序结束时释放分配的空间,以免造成内存泄漏。
相关推荐
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)