我想问一下我这个为什么不对,我用的是指针数组的写法,我想用一个数组里的元素代表一个指针为字符串
该回答引用GPTᴼᴾᴱᴺᴬᴵ
您的代码中有几个错误,我会逐个指出并进行解释。
第 7 行的 scanf 函数中,应该用 %s 而不是 % 。
在第 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;
}
你定义的是一个指针数组,每一个数组元素都是一个指针。
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]这样子