#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 13:42:43 浏览: 47
#include <stdio.h>
这段代码的问题在于使用了未分配内存的字符串指针数组,会导致程序运行时出现不可预测的错误。具体来说,代码中使用了如下语句定义了一个指针数组:
```
char *ch[num];
```
这里使用了变量num作为数组大小,但是在定义时并没有为每个指针分配内存空间,所以在读取字符串时,程序会尝试将字符串写入未分配的内存空间,导致程序崩溃。
要修复这个问题,可以使用动态内存分配函数malloc为每个指针分配内存空间,例如:
```
char *ch[num];
for (int i = 0; i < num; i++) {
ch[i] = (char*)malloc(sizeof(char) * 100); // 为每个指针分配100字节的内存空间
scanf("%s",ch[i]);
// ...
}
```
这样就可以避免使用未分配内存的指针数组导致的问题。同时,为了避免内存泄漏,记得在程序结束时使用free函数释放动态分配的内存空间。
阅读全文