1

所以我对 C 很陌生,而且我刚刚开始使用指针。我正在使用二维数组将一组字符串从十六进制逐个字母转换为十进制。但是,在此过程中,我必须获取每个字符串的第一个字符,为此我试图将它们分配给一个字符。这条线特别给我带来了麻烦。

aChar = input[j][i];

它一直说我无法从 const char* 转换为 char,但无论我如何更改它,我似乎都无法让它工作。

这是完整的程序:

#include <stdio.h>
#include "catch.hpp"
#include <unistd.h> 
TEST_CASE("Listing 2.2")
{
    int x; 
    int j = 0;
    int i = 0;
    x = 0; 
    const int N = 8;
    char aChar;
    const char* input[N][5] = {"a000", "ffff", "0400", "1111", "8888", "0190", "abcd", "5555"};
    int answers[N] = {40960, 65535, 1024, 4369, 34952, 400, 43981, 21845};
    for (j=0; j>N; j++){
        for(i=0; i>5; i++){
            aChar = input[j][i];
            x = x << 4;                  
            if (aChar <= '9') 
            { 
                x = x + (int)(aChar & 0x0f); 
            } 
            else 
            { 
                aChar = aChar & 0x0f; 
                aChar = aChar + 9; 
                x = x + (int)aChar; 
            }
            CHECK(answers[j] == x); 
        }//end for 1
    }//end for 2 
    printf("End of program.\n"); 
}

任何帮助,将不胜感激!

4

5 回答 5

2

input是一个指向字符的二维数组。实际上它有3个维度。N*5 的字符串的二维和第三维将遍历每个字符串中的字符。

const char* input[N][5]

如果你想要每个字符串的第一个字符,你需要使用

aChar = input[j][i][0];
于 2018-09-21T06:28:26.933 回答
1

这是罪魁祸首:

const char* input[N][5] = {"a000", "ffff", "0400", "1111", "8888", "0190", "abcd", "5555"};

您想将一个数组声明为 8 个大小为 5 的字符串(4 个数字 + 终止 null),但实际上声明了一个由 8 个 5 个指针数组组成的数组。

你想要的是:

const char input[N][5] = {"a000", "ffff", "0400", "1111", "8888", "0190", "abcd", "5555"};
于 2018-09-21T06:41:22.343 回答
0

您为 for 循环使用了错误的条件。您i/j用 0 初始化了循环变量 ( ),但如果i/j大于,则要求终止循环5/N。如果你想遍历你的整个二维数组,它应该是这样的:('<'而不是'>')

for (j=0; j<N; j++){
    for(i=0; i<5; i++){
    //... your code
    }//end for 1
}//end for 2 
于 2018-09-21T07:27:00.410 回答
0

我正在使用二维数组

为了使用char你应该声明的二维数组:const char input[N][5]. const char* input[N][5]是一个二维数组char*(而不是一个字符串数组,你得到一个二维字符串数组)。

鉴于您的声明,难怪 aaChar = input[j][i];导致 a 分配char*给 a char,这是一个错误。

于 2018-09-21T06:53:36.130 回答
0

aChar = 输入[j][i]; 在此语句中,您试图将const 指针地址分配给char,这是错误的语句。

你需要引用指针变量然后赋值给对应的变量,你能把语句改成,aChar = *input[j][i];

于 2018-09-21T08:17:41.603 回答