gpt4 book ai didi

字符串的 C char 到数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:43 25 4
gpt4 key购买 nike

我有 2 个定义,一个带有字符串,一个带有数字。我如何使用字符串和数字从定义中创建一个常量数组。还有一些额外的常量应该在这个数组中。

我如何根据定义的 FOO 和 BAR 编写此代码以在数组 foobar 中包含 0x22、0x41、0x42、0x42、0x21?

#define FOO "AB"
#define BAR 33

extern int rs232_write(const unsigned char *data, unsigned char count);

const unsigned char foobar[] =
{
0x22,
FOO[0], /*what must i put here, this do not work*/
FOO[1],
0x42,
BAR,
};


int main(void)
{
rs232_write(foobar,sizeof(foobar));
return 1;
}

例如,在 gcc 中,我得到错误:

./001.c:9:5: error: initializer element is not constant
FOO[0], /*what must i put here*/
^

字符串的长度总是相同的。我也尝试了另一种方式:

#define FOO "AB"
#define BAR 33

extern int rs232_write(const unsigned char *data, unsigned char count);

const char foobar[] = \
"\x22" \
FOO \
"\x42" \
BAR /*what must i put here, this also not work*/


int main(void)
{
rs232_write(foobar,sizeof(foobar));
return 1;
}

这里我也得到一个错误,例如 gcc 打印:

./002.c:2:13: error: expected ‘,’ or ‘;’ before numeric constant
#define BAR 33
^

我在一个空间不大的微 Controller 上工作,所以我想避免在运行时创建数组,而且我的编译器只支持 C89。

最佳答案

最简单的,使用memcpy:

#include <stdio.h>
#include <string.h>

#define FOO "AB"
#define BAR 33

extern int rs232_write(const unsigned char *data, unsigned char count);

unsigned char _foobar[] =
{
0x22,
0, 0,
0x42,
BAR,
};
const unsigned char *foobar;

int main(void)
{
foobar = (const unsigned char *)memcpy(_foobar + 1, FOO, 2) - 1;
rs232_write(foobar,sizeof(foobar));
return 0;
}

丑陋的,使用 X Macro和一个 compound literal :

这样你就可以使用前两位数字了:

const unsigned char foobar[] =
{
0x22,
'A', 'B',
0x42,
33,
};

或完整字符串"AB"

#include <stdio.h>

#define FOO X('A', 'B', '\0')
#define BAR 33

extern int rs232_write(const unsigned char *data, unsigned char count);

const unsigned char foobar[] =
{
0x22,
#define X(a, b, c) a, b
FOO,
#undef X
#define X(a, b, c) ((char []){a, b, c})
0x42,
BAR,
};

int main(void)
{
// rs232_write(foobar,sizeof(foobar));
printf("%s\n", FOO);
return 0;
}

输出:

AB

关于字符串的 C char 到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41935904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com