将char *分配给char

时间:2018-09-21 06:19:18

标签: c pointers catch2

所以我对C还是很陌生,我才刚刚开始使用指针。我正在使用2D数组将一组字符串从十六进制转换为十进制,一个字母一个字母地转换。但是,在此过程中,我必须获取每个字符串的第一个字符,然后尝试将其分配给char。 这行特别给我带来麻烦。

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"); 
}

任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:2)

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

const char* input[N][5]

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

aChar = input[j][i][0];

答案 1 :(得分:1)

这是罪魁祸首:

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

您要声明一个数组,该数组包含8个大小为5的字符串(4位数字+终止null),但实际上是声明一个由5个 pointers 组成的8个数组的数组。

您想要的是:

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

答案 2 :(得分:0)

  

我正在使用2D数组

要使用char的2D数组,应声明:const char input[N][5]const char* input[N][5]char*的2D数组(而不是字符串数组,而是2D字符串数组)。

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

答案 3 :(得分: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 

答案 4 :(得分:0)

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

您需要引用指针变量,然后分配给相应的变量, 您可以将语句更改为 aChar = * input [j] [i];