那当然不是这样,它没有充分的信息的情况下,给出的方向自然也会宽泛。
我们都是老鸟,有它没它我们本来就会沿着这条路径一个个尝试过去。
所以他的很多回答会觉得帮助不大。
当你进入不熟悉领域的时候,或者一个小白来用的时候,它给出的这些帮助就不再是毫无意义的了。
而且它是可以根据你给的信息精简的。
我目前感受gpt的价值就是:
1. 行业专家,永远存在你不懂得领域。在这些领域gpt比你能找到的大多数人靠谱。
2. 干脏活累活,比如要加log,我现在都是代码一贴让它给我加log。它会自己去理解我在调试什么问题,在哪里要加什么样的log。或者一些子功能,比如我需要一个rtu解析,我也懒得找库了,直接让gpt现场轮一个。
3. 信息整理收集,比如我懒得看手册,直接把手册和问题一起丢给gpt让它替我看。我贴个例子,见附件
就你的问题,首先我一开始就会用第二种写法,其次要追查的话得watch或者log p_Sample的每一次变化,挺烦人的...
顺便,我继续把你的问题丢给gpt...
================
你遇到的问题确实很有趣。首先,我们来分析你的两行代码。
第一行代码:
(p_Sample!=(&SampleCharastic[MAX_SAMPLE-1]))?(p_Sample++):(p_Sample=&SampleCharastic[0]);
当p_Sample不等于数组SampleCharastic的最后一个元素的地址时,这行代码会递增p_Sample;否则,它会将p_Sample重置为数组的第一个元素的地址。
第二行代码:
(p_Sample<(&SampleCharastic[MAX_SAMPLE-1]))?(p_Sample++):(p_Sample=&SampleCharastic[0]);
这行代码的逻辑类似,但使用了“小于”运算符而不是“不等于”运算符。
理论上,第一行代码应该与第二行代码表现相同,前提是p_Sample只可能在数组SampleCharastic的范围内或者与数组的最后一个元素地址相等。但是,如果出于某种原因p_Sample超出了数组的范围(例如,它比数组的最后一个元素的地址大),第一行代码就不会将p_Sample重置为数组的开始,而第二行代码会。
在你的描述中,你提到“已经定义p_Sample是char指针了”。问题可能在于,在某些情境下,p_Sample不只是递增一次。例如,考虑以下的情境:
p_Sample = &SampleCharastic[MAX_SAMPLE-1];
p_Sample++;
在这种情况下,p_Sample已经超出了数组的范围。使用第一行代码,p_Sample会继续递增,因为它不等于&SampleCharastic[MAX_SAMPLE-1]。但使用第二行代码,p_Sample会被重置为数组的开始,因为它比&SampleCharastic[MAX_SAMPLE-1]大。
为了确保程序的健壮性,我建议采用第二种方法,使用“小于”运算符。这样,即使p_Sample出于某种原因超出了数组的范围,你的代码仍然可以正确地将其重置。
总的来说,这并不是C数据类型检查不严格的问题,而是需要确保指针操作始终在预期的范围内。如果不确定,使用边界检查(如第二行代码所示)是更安全的做法。
【 在 dismoon 的大作中提到: 】
: 已经解决问题了
: 但是好像应该感谢chatgpt,又好像它没帮到我什么
: 首先说一下为什么要感谢,因为的确给我指了个方向,我把其他时钟都关闭了,解决了问题,然后把关闭掉的时钟一个一个开起来,把问题定位到了特定时钟内部的代码——这个解题思路有没有chatgpt我都会这么干,就是一部分一部分disable代码,然后一点点查,给我的帮助就是直接帮我定位到是其他时钟,所以算给我节省了一点时间。
: ...................
附件(18.8KB) 查找tim3和tim14差异.md--
FROM 180.111.26.*