#include <stdio.h> #include <stdlib.h> int main() { int num,size,target,max=0; scanf("%d",&num); char *ch[num]; for(int i=0;i<num;i++){ scanf("%s",ch[i]); size=strlen(ch[i]); if(max==0){max=size;target=i;} else if(size>max){max=size;target=i;} } printf("%s",ch[target]); }问题在哪
时间: 2024-03-16 07:42:46 浏览: 61
#include <stdio.h>
这段代码的问题在于使用了未初始化的变量`target`,这可能导致程序输出错误的结果。
在代码中,变量`target`被用来记录输入的字符串中长度最长的字符串的下标。在代码的for循环中,如果当前输入的字符串长度比之前记录的最大长度还要大,就更新`max`和`target`变量。但是,在第一次比较时,如果输入的第一个字符串长度为0,那么变量`max`和`target`都会被赋值为0,而这个值可能不是最长字符串的下标,导致程序输出错误结果。
要解决这个问题,可以在定义变量`target`时,将其初始化为-1,表示还没有记录最长字符串的下标。然后在比较字符串长度时,如果当前字符串长度比最大长度还要大,就更新`max`和`target`变量。最后判断一下`target`的值是否为-1,如果不是,就输出最长字符串。
修改后的代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int num, size, target, max = 0;
scanf("%d", &num);
char *ch[num];
for (int i = 0; i < num; i++) {
ch[i] = (char*)malloc(sizeof(char) * 100); // 为每个指针分配100字节的内存空间
scanf("%s", ch[i]);
size = strlen(ch[i]);
if (size > max) {
max = size;
target = i;
}
}
if (target != -1) {
printf("%s", ch[target]);
}
return 0;
}
```
这样就可以避免使用未初始化变量导致的问题。
阅读全文