关于#C语言#的问题,如何解决?

C语言求解!利用malloc函数开辟动态存储单元,顺序存放输入的10个字符串,
然后求10个字符串的最大值。

基于Monster 组和GPT的调写:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_LEN 100

int main() {
    char *strings[10];  // 定义一个字符指针数组,用于存放字符串
    char buf[MAX_LEN];  // 定义一个缓冲区,用于读取输入的字符串
    int i;

    // 读取10个字符串,并将它们存储在动态分配的内存中
    for (i = 0; i < 10; i++) {
        printf("请输入第%d个字符串:", i + 1);
        scanf("%s", buf);

        strings[i] = (char *) malloc(strlen(buf) + 1);  // 分配动态内存
        strcpy(strings[i], buf);  // 将字符串复制到动态内存中
    }

    // 求最大值
    char *max = strings[0];  // 假设第一个字符串为最大值
    for (i = 1; i < 10; i++) {
        if (strcmp(strings[i], max) > 0) {
            max = strings[i];  // 更新最大值
        }
    }

    printf("最大值为:%s\n", max);

    // 释放动态内存
    for (i = 0; i < 10; i++) {
        free(strings[i]);
    }

    return 0;
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7736542
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:c malloc实现:动态申请三维数组
  • 除此之外, 这篇博客: C语言子函数返回二维数组讨论中的 这里可以通过Malloc函数,开辟内存空间,将数组地址就可以通过子函数来进行返回,在主函数中进行遍历了。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h>
    #include <stdlib.h>
    
    char ** Function1()
    {
    	char **Arr = NULL;
    	char i = 0, j = 0;
    	char Brr[3][3] = {"123", "456", "789"};
    
    	Arr = (char **)malloc(sizeof(char *) * 3);
    	for (i = 0; i < 3; i++)
    	{
    		Arr[i] = (char *)malloc(sizeof(char) * 3);
    		for (j = 0; j < 3; j++)
    		{
    			Arr[i][j] = Brr[i][j];
    		}
    	}
    	return Arr;
    }
    
    int main(int argc, const char *argv[])
    {
    	char **p = NULL;	
    	int i = 0, j = 0;
    
    	p = Function1();
    	printf ("Arr[0][0] = %c\n", *(*p));			// 1
    	printf ("Arr[0][1] = %c\n", *(*(p) + 1));	// 2
    	printf ("Arr[0][2] = %c\n", *(*(p) + 2));	// 3
    
    	printf ("Arr[1][0] = %c\n", *(*(p + 1)));		    // 4
    	printf ("Arr[1][1] = %c\n", *(*(p + 1) + 1));    // 5
    	printf ("Arr[1][2] = %c\n", *(*(p + 1) + 2));	// 6
    
    	printf ("Arr[2][0] = %c\n", *(*(p + 2)));		    // 7
    	printf ("Arr[2][1] = %c\n", *(*(p + 2) + 1));	// 8
    	printf ("Arr[2][2] = %c\n", *(*(p + 2) + 2));	// 9
        // 将保存每一行的指针先释放掉
    	for (i = 0; i < 3; i++)
    	{
    		if (*(p + i) != NULL)
    		{
    			free (*(p + i));
    			*(p + i) = NULL;
    			printf ("free *(p + %d) success!!!\n", i);
    		}
    	}
    	// 最后将保存整个二维数组的指针释放掉
    	if (p != NULL)
    	{
    		free (p);
    		printf ("free p success!!!\n");
    	}
    	return 0;
    }