在C中从'char'到'int *的无效转换

时间:2010-05-22 20:54:36

标签: c arduino

我有以下数组:

int A[] = {0,1,1,1,1, 1,0,1,0,0, 0,1,1,1,1};
int B[] = {1,1,1,1,1, 1,0,1,0,1, 0,1,0,1,0};
int C[] = {0,1,1,1,0, 1,0,0,0,1, 1,0,0,0,1};
//etc... for all letters of the alphabet 

一个在5x3 LED矩阵上打印字母的功能:

void printLetter(int letter[])

我有一串信件:

char word[] = "STACKOVERFLOW";

我希望将字符串的每个字符传递给printLetter函数。

我试过了:

int n = sizeof(word);

for (int i = 0; i < n-1; i++) {  
    printLetter(word[i]);
}

但是我收到以下错误:从'char'无效转换为'int *'

我该怎么办?

谢谢!

5 个答案:

答案 0 :(得分:5)

在参数类型错误的后面有一个更深层次的问题:缺少char和相应的int[]之间的映射。

printLetter重新定义为

void printLetter(char letter)

满足编译器,但本身并不能解决您的问题。无论是在printLetter内部还是外部,您都需要为给定的int[]获取相应的char

实现这一目标的一种简单的暴力方法是使用switch,但更好的方法是使用第二个数组,例如:

void printLetter(char letter) {
  static int* charToMatrix[] = { A, B, C, ... };
  int* matrixToPrint = charToMatrix[letter - 'A'];
  // print the matrix
}

请注意,这是一个示例 - 我现在无法访问C编译器,所以我不能保证它可以直接使用,但希望它能很好地说明这一点。它还缺少边界检查,因此如果您尝试打印“未知”字符,它会在奇怪的随机位置访问内存,可能导致崩溃。

这个解决方案适用于大写字母;如果你还需要打印小写字母或其他字符,你可能更喜欢使用256个元素的数组,其中只填充对应于“已知”矩阵的索引处的元素,其余的设置为NULL。

答案 1 :(得分:2)

你不能轻易地将'a'从“stackoverflow”转换为A - int的数组。您可以在一个字母中定义代表字母的所有数组,并通过将字母转换为int来获取它们。

答案 2 :(得分:2)

您需要做的是从一个字符转换为一个数组。所以当你有字母'A'时,你会想要使用数组A。最简单的方法是通过查找表。

int *lookup[256];  // assuming ASCII
memset(lookup, 0, sizeof(lookup));

lookup['A'] = A;
lookup['B'] = B;
...

然后当你有一个角色时,你可以获得正确的数组:

void printletter(char c);
{
    int *data = lookup((unsigned char)c);

    // In case you get a letter that you don't know how to display
    if (data != NULL)
    {
        // display with data
    }
}

不是在运行时构建数组,而是可以在编译时构建数组,尽管由于需要手动输入NULL指针会有点困难。

int *lookup[256] = {
    NULL,   // you need a total of 65 NULL's
    NULL,
    ...
    A,      // so this is at the correct position
    B,
    C,
    ...
};

答案 3 :(得分:1)

该函数声明为void printLetter(int letter[]),这意味着它需要一个指向int数组的指针。另一方面,word是一个字符数组,word[i]是一个字符,它根本不是正确的类型。如果printLetter()真的只是打印一个字符,你应该将它的参数改为char。

答案 4 :(得分:0)

void printLetter(int letter[]) 

应该是     void printLetter(char letter)

因为:word是char [] word[i]是一个字符。