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