我想问一下我这个为什么不对,我用的是指针数组的写法

我想问一下我这个为什么不对,我用的是指针数组的写法,我想用一个数组里的元素代表一个指针为字符串

img

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
您的代码中有几个错误,我会逐个指出并进行解释。

  1. 第 7 行的 scanf 函数中,应该用 %s 而不是 % 。

  2. 在第 10 行中,您定义了一个指针数组 char *p[n] ,但是并没有为其中的每个指针分配空间。因此,在使用 scanf 读取输入时,程序会试图将字符串读入未分配的内存,从而导致错误。为了解决这个问题,您可以使用动态内存分配函数 malloc 为每个指针分配空间,例如:

for (i = 0; i < n; i++) {
    p[i] = (char*)malloc(81 * sizeof(char));  // 为每个指针分配 81 字节的空间
    scanf("%s", p[i]);  // 读取字符串并存储到指针所指向的内存空间
}


3.第 14 行中,您使用了一个未定义的函数 strepy ,我猜测您的意图是将 p[0] 所指向的字符串赋值给 min 。为了实现这个目的,可以使用 strcpy 函数,例如:

strcpy(min, p[0]);


4.第 16 行中,变量 i 的首字母写成了小写字母 o ,应该改为大写字母 O 。

5.在第 17 行和第 20 行中,应该将大于号和小于号之间的双引号改为单引号。此外,第 18 行中的空语句应该删除,否则程序会出现逻辑错误。最终的代码应该是这样的:

for (i = 0; i < n; i++) {
    if (strcmp(min, p[i]) > 0) {
        strcpy(min, p[i]);
    }
}


6.第 22 行中,您使用了一个未定义的函数 stropy ,应该改为使用 strcpy 函数。此外,您在输出字符串时没有在格式控制字符串中指定字符串长度,应该改为:

printf("Min is: %s", min);


综上所述,您可以使用以下代码来实现您的需求:

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

int main() {
    int n, i;
    scanf("%d", &n);
    char *p[n];
    for (i = 0; i < n; i++) {
        p[i] = (char*)malloc(81 * sizeof(char));
        scanf("%s", p[i]);
    }
    char min[81];
    strcpy(min, p[0]);
    for (i = 1; i < n; i++) {
        if (strcmp(min, p[i]) > 0) {
            strcpy(min, p[i]);
        }
    }
    printf("Min is: %s", min);
    return 0;
}


你定义的是一个指针数组,每一个数组元素都是一个指针。

img


但你并没有给这个数组中每一个指针开辟存储空间,就使用了scanf往里面写入字符串。这是不对的!
正确方法应该是在scanf之前,为每一个指针都malloc开辟空间,也就是题目要求的80以下(开辟80个字符即可)

int N = 80;//开辟80个字节的空间
char *p[10]; 
for (i=0;i<10;i++) { 
    p[i]= (char *)malloc (sizeof (char)*N); //为每个指针申请开设N字符的存储空间 
} 

如果对你有帮助,还请点个采纳,万分感谢!

p数组元素你都没有分配空间啊
改成char p[n][100]这样子