return 来自不兼容的指针类型?
return from incompatible pointer type?
我在return sarray 所在的行中收到来自不兼容指针类型的警告Return,这是为什么呢?我已经尝试了一段时间了。我还在行
中收到了不兼容指针类型的警告
( *iarray )[CHARACTER_LIMIT] = scanCode();
但我认为如果我修复了第一部分,那么修复这一部分会更容易。
#include <stdio.h>
#define MAX_WORDS 9054 //Scope variables
#define CHARACTER_LIMIT 6
#define MAX_TRIPLETS 3018
char** scanCode(void)
{
FILE *in_file;
int i = 0;
static char sarray[MAX_WORDS][CHARACTER_LIMIT];
in_file = fopen("message.txt", "r");
for(i=0; i<WORD_COUNT_MAX; i++) {
fscanf(in_file,"%s", sarray[i]);
}
return sarray;
fclose(in_file);
}
int main(void)
{
char ( *iarray )[CHARACTER_LIMIT] = scanCode();
while(1);
return 0;
}
sarray
是一个数组或多个数组,它可以衰减为指向数组的指针,但不能衰减为指向指针的指针。将 sarray
转换为 char**
应该是一个错误。
除此之外,scanCode()
return 是指向 char
的指针。 iarray
是指向长度为 CHARACTER_LIMIT
的 char
数组的指针。它们不是同一类型,编译器会警告您这一点。
您需要更改函数的 return 类型:
char (*scanCode(void))[CHARACTER_LIMIT] {
....
return sarray;
}
此处,sarray
衰减为指向长度为 CHARACTER_LIMIT
的数组的指针。
我在return sarray 所在的行中收到来自不兼容指针类型的警告Return,这是为什么呢?我已经尝试了一段时间了。我还在行
中收到了不兼容指针类型的警告( *iarray )[CHARACTER_LIMIT] = scanCode();
但我认为如果我修复了第一部分,那么修复这一部分会更容易。
#include <stdio.h>
#define MAX_WORDS 9054 //Scope variables
#define CHARACTER_LIMIT 6
#define MAX_TRIPLETS 3018
char** scanCode(void)
{
FILE *in_file;
int i = 0;
static char sarray[MAX_WORDS][CHARACTER_LIMIT];
in_file = fopen("message.txt", "r");
for(i=0; i<WORD_COUNT_MAX; i++) {
fscanf(in_file,"%s", sarray[i]);
}
return sarray;
fclose(in_file);
}
int main(void)
{
char ( *iarray )[CHARACTER_LIMIT] = scanCode();
while(1);
return 0;
}
sarray
是一个数组或多个数组,它可以衰减为指向数组的指针,但不能衰减为指向指针的指针。将 sarray
转换为 char**
应该是一个错误。
除此之外,scanCode()
return 是指向 char
的指针。 iarray
是指向长度为 CHARACTER_LIMIT
的 char
数组的指针。它们不是同一类型,编译器会警告您这一点。
您需要更改函数的 return 类型:
char (*scanCode(void))[CHARACTER_LIMIT] {
....
return sarray;
}
此处,sarray
衰减为指向长度为 CHARACTER_LIMIT
的数组的指针。