在代码中的函数之间返回数组指针有什么问题?

时间:2015-12-04 19:36:24

标签: c arrays string pointers

因此,为了描述我的代码,我的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]'

但显然尽管有这些警告和注释,它仍会运行

1 个答案:

答案 0 :(得分:1)

在C语言中,人们经常说指针和数组是相同的,并且在很多方面都是如此,但情况并非总是如此。

int* converter(char** array)

您正在传递此函数实际上不是char**类型的函数。您传递的是char *[6]类型。在转换器函数内部,传入的值被视为错误的指针类型,因此用于查找数据的数学运算是错误的。它会将字符{'o','n','e',0}解释为指针而不是数组(好吧,在32位机器上,在64位上它也会使用下一个条目中的字节)。