将 char* 分配给 char
Assigning a char* to a char
所以我是 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");
}
如有任何帮助,我们将不胜感激!
input
是指向字符的二维数组。实际上它有 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 位数字 + 终止空值),但实际上声明了一个包含 8 个数组的数组,每个数组包含 5 个 指针 .
你想要的是:
const char input[N][5] = {"a000", "ffff", "0400", "1111", "8888", "0190", "abcd", "5555"};
I'm using a 2D array
为了使用 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
,您要求终止循环。
如果你想遍历整个二维数组,它应该是这样的:
(“<”而不是“>”)
for (j=0; j<N; j++){
for(i=0; i<5; i++){
//... your code
}//end for 1
}//end for 2
aChar = 输入[j][i];
在此语句中,您试图将 const 指针地址 分配给 char,
这是错误的说法。
你需要引用指针变量然后赋值给对应的变量,
你能把声明改成,
aChar = *输入[j][i];
所以我是 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");
}
如有任何帮助,我们将不胜感激!
input
是指向字符的二维数组。实际上它有 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 位数字 + 终止空值),但实际上声明了一个包含 8 个数组的数组,每个数组包含 5 个 指针 .
你想要的是:
const char input[N][5] = {"a000", "ffff", "0400", "1111", "8888", "0190", "abcd", "5555"};
I'm using a 2D array
为了使用 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
,您要求终止循环。
如果你想遍历整个二维数组,它应该是这样的:
(“<”而不是“>”)
for (j=0; j<N; j++){
for(i=0; i<5; i++){
//... your code
}//end for 1
}//end for 2
aChar = 输入[j][i]; 在此语句中,您试图将 const 指针地址 分配给 char, 这是错误的说法。
你需要引用指针变量然后赋值给对应的变量, 你能把声明改成, aChar = *输入[j][i];