有人可以解释下面的代码片段,特别是第三行,因为它似乎导致我的代码中的错误:
char * (strtok_r)(char *s, const char *delimiters, char **lasts) {
char *sbegin, *send;
sbegin = s ? s : *lasts;
...
Run Code Online (Sandbox Code Playgroud)
我猜测它更像是我传递了一个不正确的指针值或什么,但不能弄清楚,因为我不确定该功能是如何做它做的...
钽
编辑:我不完全确定发生的错误,因为g $£&mn f*£$%^%Visual Studio JIT调试器一直试图打开并混乱一切.GRR ..
我正在开发一个用于嵌入式平台的库。我在作为 lib 一部分的标头中有代码
typdef enum bool {false, true} bool;
如果 lib 用户已经定义了一个名为 bool 的类型,我该如何编码以便我的 lib 不会尝试重新声明它?
目前我已经使用了#defines
#ifndef _BOOL
#define _BOOL
typedef enum bool{...
#endif
Run Code Online (Sandbox Code Playgroud)
然而,这取决于定义了 bool 的用户也定义了 _BOOL
有没有办法检查具有特定名称的类型是否已经存在?
(注意这是一个 C 问题,而不是 C++,我和我假设的 lib 用户都没有使用 stdbool,Ta)
我是C语言的新手,我正在尝试使用如下指针.
po1被定义为指向地址的指针.PC为其分配1个字节的内存.po2是一样的.我想得到指向的内存地址po2,但只得到一个意外的0,显然不是地址.
#include <stdio.h>
int main(int argc, char *argv[]) {
char *po2, *po1;
printf("---%d---\n", po2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
demo11.c:5:23:警告:格式指定类型'int'但参数的类型>'char*'[-Wformat] printf(" - **** - %d - **** - \n",po2); 生成了~~ ^ ~~%s 1个警告. - **** - 0 - **** -
然后我试图给foo内存po2指向的值,但它给出了一个错误.
#include <stdio.h>
int main(int argc, char *argv[]) {
char *po2, *po1;
char foo = 'D';
*po2 = foo;
printf("%c---------------\n", *po2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
由于信号终止:分段故障(11)
显然,错误是由声明引起的*po2 = …
我的Tiva C控制器有问题很奇怪,我想要一些帮助,基本上它在一条sprintf线上崩溃,没有明显的理由这样做.我的应用程序只是一个智能玩具,可以通过蓝牙在各种模式下进行控制.对于模式,我们使用有限状态机代码并读取玩具的当前加速度仅用于监控,并且每隔一段时间使用周期性定时器发送它,每隔几秒产生一次周期性中断以更新值.促进
现在,加速度的读取是通过一个简单的函数读取完成,直到尝试将该读数存储在字符串中,并且程序只是抛出一个硬故障.这个功能(读取加速度)在玩具车的所有其他模式下都能正常工作,除了这种新模式它始终崩溃并抛出硬故障错误.我目前的想法是,它可能是由于太多的函数调用所以堆栈已满,但我怎么知道堆栈是否已满?
这是它崩溃的线:
sprintf(acceleration,"x%.2f y%.2f z%.2f", X_Axis1, Y_Axis1, Z_Axis1);
Run Code Online (Sandbox Code Playgroud)
这是一个简单的sprintf存储从加速轴读出的值x,y和z为什么发生这种情况的任何想法然后存储在加速度变量?
这也是定时器处理程序里面keil的故障报告我用来调用一个ReadAccel()函数,我做的函数除了最近的一个以外的所有模式都有效,所以我想我会把函数放在定时器处理程序里面的函数中来节省一点从堆栈,但它仍然给出了一个严重的错误

如果有人可以重定向我如何判断这是否是一个堆栈完全错误我会非常感激,因为我认为这是它的本质.
void TIMER2A_Handler(void)
{
char acceleration[22];
RawX_Axis1=ReadAccelX();
X_Axis1 = RawX_Axis1 * 0.00390625+0.35;
RawY_Axis1=ReadAccelY();
Y_Axis1 = RawY_Axis1 * 0.00390625+0.08;
RawZ_Axis1=ReadAccelZ();
Z_Axis1 = (RawY_Axis1 * 0.00390625)+1.08;
sprintf(acceleration,"x%.2f y%.2f z%.2f",X_Axis1,Y_Axis1,Z_Axis1);
UARTSend(UART3_BASE,acceleration);
UARTCharPut(UART3_BASE,'\n');
TIMER2_RIS_R = 0xFFFFFFFF;
TIMER2_ICR_R = 0xFFFFFFFF;
}
Run Code Online (Sandbox Code Playgroud) 通常,如果我想编译一个名为number_input.cI的类型的C程序
cc -o number_input number_input.c
Run Code Online (Sandbox Code Playgroud)
我想使用我的mac终端创建一个脚本,这样我就不必输入那个额外的单词了.最初我这样做是为了节省自己1秒的节目,但具有讽刺意味的是我花了2个多小时试图让这个工作.
a= echo "$1" | rev | cut -c3- | rev
echo $a
cc -o $a $1
echo $1
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
number_input
clang:错误:没有输入文件number_input.c
我可以说正确输入名称,但由于某种原因,cc命令没有取值$1?我假设不知何故$1不直接转换成字符串或类似的东西,但我不确定.
我想在分配动态内存后更改char指针的内容,是否可能?如果没有,为什么?我的程序抛出运行时错误.
#include <stdio.h>
int main()
{
char * str = (char *) malloc (10 * sizeof(char));
str = "Hello";
str[2] = 'L'; // here the program throws run time error
printf("%s", str);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 在 C++ 中:
列表是可以按顺序包含非唯一值的集合
多重集是一个可以按顺序包含非唯一元素的集合
那么两者的具体区别是什么呢?为什么我会在另一个上使用?
我曾尝试在网上查找此信息,但大多数参考资料(例如 cplusplus.com)以不同的方式谈论这两个容器,因此差异并不明显。
#include<stdio.h>
#include<string.h>
void terminateString(char *str){
str[3] = 0;
printf("string after termination is:%s\n",str);
}
int main(){
char str[]="abababcdfef";
terminateString(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
string after termination is:aba
Run Code Online (Sandbox Code Playgroud)
我们只将索引'3'处的元素赋值为0,但为什么忽略该索引之后的所有字符?有人可以解释一下这种行为吗?