虽然我使用C++,但作为一项要求,我需要使用const char*数组而不是字符串或char数组.由于我是新手,我需要学习如何使用const char*.我已经将我的const char*数组声明为const char* str[5].在程序的稍后阶段,我需要使用值填充5个元素中的每个元素.
但是,如果我尝试分配这样的值:
const char* str[5];
char value[5];
value[0] = "hello";
str[0] = value[0];
Run Code Online (Sandbox Code Playgroud)
它不会编译.将char数组添加到char到const char*数组然后打印数组的正确方法是什么?任何帮助,将不胜感激.谢谢.
我正在尝试从命令行向我的main函数发送输入.然后输入发送到函数checkNum等.
int main(int argc, char *argv[])
{
int x = checkNum(argv[1]);
int y = checkNum(argv[3]);
int o = checkOP(argv[2]);
…
}
Run Code Online (Sandbox Code Playgroud)
它应该是一个计算器,例如在我写命令行时:
program.exe 4 + 2
Run Code Online (Sandbox Code Playgroud)
它会给我答案6(不包括此代码).
问题是当我想要繁殖时,我输入例如
program.exe 3 * 4
Run Code Online (Sandbox Code Playgroud)
它似乎创建了一个指针(或者某些东西,不太确定),而不是给我指向char'的char指针*.
问题是我可以得到输入' *'的行为方式与我输入'+'的方式相同吗?
编辑:"*"在命令行中写入工作.有没有办法我只需要打字*?
代码在Windows上运行,这似乎是问题的一部分.
交易过程中EMV ODA、CA和发行人证书是什么关系?
所以我知道
struct bit
{
unsigned char a : 1;
}
Run Code Online (Sandbox Code Playgroud)
由于填充,仍会占用一个字节,我的问题是:
struct bit
{
unsigned char a : 1;
...
unsigned char h : 1;
}
Run Code Online (Sandbox Code Playgroud)
这个结构会占用与char相同的大小吗?如果是这样,我最好只使用一个char而不是?我问,因为我想使用位作为键,但如果可能的话,我宁愿避免按位操作.
我有一个聊天窗口小部件,我想将其嵌入其他人的网站。看起来就像对讲机和所有其他聊天弹出窗口。无论滚动到何处,我都希望使聊天弹出窗口停留在屏幕的右下角。但是,当我将聊天应用程序导入为iframe并提供给iframe时position: fixed; bottom: 0px; right: 15px;,iframe不会到达我期望的位置。
我意识到iframe对于嵌入式JS小部件而言不是最佳选择,所有最好的嵌入式应用程序都从文件存储中导入.js文件。在网上搜索了几个小时之后,我还没有找到关于如何制作那些挂接到a并呈现小部件的JS文件的解释/教程。您甚至怎么做那些纯JavaScript应用之一,它们又叫什么?(我假设不是Web组件,因为已经有很长时间的小部件了)。
抱歉,这个问题有点儿菜鸟。在我自己尝试实现之前,我从来不知道这是一回事。任何人都可以向我指出如何开始制作JS网络小部件的正确方向?谢谢!(也许ReactJS到VanillaJS转换器会超级酷)
关于C中序列点的维基百科条目具有以下序列点:
与输入/输出格式说明符关联的每次转换后.例如,在表达式printf("foo%n%d",&a,42)中,在评估%n之后和打印之前有一个序列点42
但C标准也说:
函数指示符的评估顺序,实际参数和实际参数中的子表达式是未指定的,但在实际调用之前有一个序列点.
对于像这样的代码,这两点似乎是矛盾的
int i=1;
printf("%d, %d and %d\n", i++, i++, i--);
Run Code Online (Sandbox Code Playgroud)
根据每个格式说明符后的维基百科条目,有一个序列点,所以它将打印如下:
1,2,3
但根据C标准中未指明的beaviour条目,它可以打印任何东西.
c stdio operator-precedence undefined-behavior sequence-points
1. int main(void)
2. {
3. int a =5, b = 6, c;
4. a + b = c; // lvalue required error
5. 2 = a ; //lvalue required error
6. }
Run Code Online (Sandbox Code Playgroud)
第4行和第5行代码被视为语法错误或语义错误?据我说,这些行应该抛出语法错误,但我发现Context Free Grammar可以生成它们.
在使用 PIC24FJ128GB204 的 MPLAB X 中学习嵌入式 C。
到目前为止,我主要听说在嵌入式设备上应该尽可能多地使用无符号类型(尤其是?),所以我开始使用 uint8_t 数组来保存字符串。但是,如果我从 stdlib.h 调用 itoa,它需要一个指向有符号字符 (int8_t) 数组的指针:
extern char * itoa(char * buf, int val, int base);
当我在无符号数组上使用 itoa 后尝试编译时,这一点特别清楚:
main.c:317:9: warning: pointer targets in passing argument 1 of 'itoa' differ in signedness
c:\program files (x86)\microchip\xc16\v1.36\bin\bin\../..\include/stdlib.h:131:15: note: expected 'char *' but argument is of type 'unsigned char *'
Run Code Online (Sandbox Code Playgroud)
在其他平台上搜索 itoa 的实现,这似乎是常见的情况。
这是为什么?
(我还注意到大多数实现都需要值/指针/基数,而出于某种原因,来自 Microchip 的 stdlib.h 首先需要指针。我花了一段时间才意识到这一点。)
在下面的示例中,“a + b”将溢出两个变量的大小。这个临时结果会存储在 16 位空间还是需要的最大空间?
这种情况是否跨编译器标准化?系统架构重要吗?我在 8 位微控制器上。Short 类型为 16 位。
res 是否等于 50000、17232 或未定义?
unsigned short a = 50000;
unsigned short b = 50000;
unsigned short res = 0;
void main()
{
res = (a + b) / 2;
}
Run Code Online (Sandbox Code Playgroud) 我开了一个C99标准。通道 4 “一致性”,第 2 页说如下:
如果出现在约束之外的“应”或“不应”要求被违反,则行为未定义。[...]
下面,在第。5 我们看到以下内容:
[...] (2) 它不应产生依赖于任何未指定、未定义或实现定义的行为的输出,并且不应超过任何最小实现限制。
这对我来说似乎表明实现定义的行为是未定义的行为,因为程序“不应”依赖于实现定义的行为。
现在,我有两个问题: