所以我对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");
}
任何帮助将不胜感激!
答案 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];