题目:编写函数char fun(char(sq)[N],intm),从m个字符串中找出最长的那个串,并
将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。
以下是我的代码😭
这主要是因为,strcmp需要判断两个字符串的长度,而判断长度的方式则是从字符串的开始已知往下读取,直到读取到\0
终止符为止,但是使用 malloc
创建的字符串并没有添加终止符,所以需要将其长度设置为0:
max = (char*)malloc(10);
max[0] = '\0'; // 把 max 的长度设置为 0
如果不设置,后果就是,max 的长度是个奇怪的值,从而出现如图所示的乱码。
你好,以下的代码凑合看,不太好用
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100 // 定义字符串数组的列数
// 函数原型
char *fun(char (*sq)[N], int m);
int main(void) {
int m, i;
printf("请输入字符串个数:");
scanf("%d", &m);
char a[m][N];
getchar(); // 清空输入缓冲区
for (i = 0; i < m; i++)
{
printf("请输入第%d个字符串:", i + 1);
gets(a[i]);
}
printf("你输入的字符串数组是:\n");
for (i = 0; i < m; i++) {
printf("%s\n", a[i]); // 打印调试 每个字符串
}
char *max;
max = fun(a, m);
printf("最长字符串:%s\n",max);
return 0;
}
// 函数实现
char *fun(char (*sq)[N], int m) {
char *max = sq[0]; // 定义一个指针变量,初始值为第一个字符串的地址
int len = strlen(sq[0]); // 定义一个整型变量,初始值为第一个字符串的长度
int i;
for (i = 1; i < m; i++) { // 遍历剩余的字符串
if (strlen(sq[i]) > len) { // 如果发现更长的字符串 交换
max = sq[i];
len = strlen(sq[i]);
}
}
return max; // 返回指针变量的值,即最长字符串的地址
}