C 将字符*分配给字符

C 将字符*分配给字符,c,pointers,catch2,C,Pointers,Catch2,所以我对C非常陌生,我刚刚开始使用指针。我使用2D数组将一组字符串逐字母从十六进制转换为十进制。然而,在这个过程中,我必须获取每个字符串的第一个字符,为此我尝试将它们分配给一个字符。 这条线给我带来了麻烦 aChar = input[j][i]; 它一直在说我不能从const char*转换为char,但无论我如何更改它,我似乎都无法让它工作 以下是完整的程序: #include <stdio.h> #include "catch.hpp" #include <unistd.

所以我对C非常陌生,我刚刚开始使用指针。我使用2D数组将一组字符串逐字母从十六进制转换为十进制。然而,在这个过程中,我必须获取每个字符串的第一个字符,为此我尝试将它们分配给一个字符。 这条线给我带来了麻烦

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"); 
}
#包括
#包括“catch.hpp”
#包括
测试用例(“清单2.2”)
{
int x;
int j=0;
int i=0;
x=0;
常数int N=8;
查阿查;
常量字符*输入[N][5]={“a000”、“ffff”、“0400”、“1111”、“8888”、“0190”、“abcd”、“5555”};
int-answers[N]={40960、65535、1024、4369、34952、400、43981、21845};
对于(j=0;j>N;j++){
对于(i=0;i>5;i++){
aChar=输入[j][i];

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

const char* input[N][5]
如果需要每个字符串的第一个字符,则需要使用

aChar = input[j][i][0];
罪魁祸首是:

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"};
我使用的是二维数组

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


根据您的声明,难怪
aChar=input[j][i];
会导致将
char*
赋值给
char
,这是一个错误。

您对for循环使用了错误的条件。 您用0初始化了循环变量(
i/j
),但如果
i/j
大于
5/N
,则要求终止循环。 如果要迭代整个二维数组,它应该如下所示: ('')

(j=0;jaChar=input[j][i]; 在此语句中,您试图将常量指针地址分配给字符, 这是错误的说法

您需要引用指针变量,然后分配给相应的变量, 你能把这句话改成, aChar=*输入[j][i]

for (j=0; j<N; j++){
    for(i=0; i<5; i++){
    //... your code
    }//end for 1
}//end for 2