因此,为了描述我的代码,我的scanCode函数从文本文件读入以生成一个名为" array"在主要功能中,2D保持弦一,二,三等直到九。我的问题在于转换器功能,因为我想转换对应于其实际数字的单词,因此在int数组中将其转换为1,从2转换为2。但我的代码有些问题,我无法找到,因为运行cmd一直在冻结!可以调试并告诉我转换器功能有什么问题吗?
#include <stdio.h>
char** scanCode()
{
FILE *in_file;
int i = 0;
static char scan[9054][6];
in_file = fopen("message.txt", "r");
while (!feof(in_file))
{
fscanf(in_file,"%s", scan[i]);
//printf("%s", scan[i]);
i++;
}
return scan;
fclose(in_file);
}
int* converter(char** array)
{
int j = 0;
static int his[9053];
int i = 9053;
for (j=0;j<i;j++)
{
if ((strcmp(array[j], "one")) == 0)
{
his[j] = 1;
}
else if ((strcmp(array[j], "two")) == 0)
{
his[j] = 2;
}
else if ((strcmp(array[j], "three")) == 0)
{
his[j] = 3;
}
else if ((strcmp(array[j], "four")) == 0)
{
his[j] = 4;
}
else if ((strcmp(array[j], "five")) == 0)
{
his[j] = 5;
}
else if ((strcmp(array[j], "six")) == 0)
{
his[j] = 6;
}
else if ((strcmp(array[j], "seven")) == 0)
{
his[j] = 7;
}
else if ((strcmp(array[j], "eight")) == 0)
{
his[j] = 8;
}
else if ((strcmp(array[j], "nine")) == 0)
{
his[j] = 9;
}
else{
his[j] = 0;
}
printf("%d",his[j]);
}
return his;
}
int main(void)
{
int i = 9054;
int d = 0;
int j = 0;
int b = 0;
int a = 0;
int c = 0;
//int hi[9053];
int final[3018];
int veryfinal[1509];
char ( *array )[6] = scanCode();
int *hi = converter(array);
while(1);
return 0;
}
基本上它在我运行它时冻结,我认为它肯定会对转换器功能做一些事情,但我不知道什么,但我得到这些小警告
17 1 [Warning] return from incompatible pointer type
85 25 [Warning] initialization from incompatible pointer type
87 24 [Warning] passing argument 1 of 'converter' from incompatible pointer type
21 6 [Note] expected 'char **' but argument is of type 'char (*)[6]'
但显然尽管有这些警告和注释,它仍会运行
答案 0 :(得分:1)
在C语言中,人们经常说指针和数组是相同的,并且在很多方面都是如此,但情况并非总是如此。
int* converter(char** array)
您正在传递此函数实际上不是char**
类型的函数。您传递的是char *[6]
类型。在转换器函数内部,传入的值被视为错误的指针类型,因此用于查找数据的数学运算是错误的。它会将字符{'o','n','e',0}
解释为指针而不是数组(好吧,在32位机器上,在64位上它也会使用下一个条目中的字节)。