共2条
1/1 1 跳转至页
ICCAVR ICCAVR问题:字符型数组赋进行字符串运算
问
由于调试程序,需要对一个字符型数组写入一个字符串,并且需要进行字符串计算.
在程序开头,我声明了一个全局数组:char s_buffer[260];
我尝试
s_buffer[]={".........."}; 失败,语法非法.
那我一个一个写吧:
int writebuffer(char *s)
{
while(*s)
{
s_buffer[s]=*s;
s++;
}
return 1;
}
不行:: operands of + have illegal types `pointer to char' and `pointer to char'
OK 我变通一下:
int writebuffer(char *s)
{char i;
while(*s)
{i=*s;
s_buffer[s]=i;
s++;
}
return 1;
}
还是不行,同样的错误! : operands of + have illegal types `pointer to char' and `pointer to char'
答 1: 还有更崩溃的情况if (s_buffer[8]=="a" & s_buffer[9]=="b") lenth1=11;
这样都不能编译: operands of == have illegal types `char' and `pointer to char'
就算我用上面的方法先变通一下,先把数组里的两个数赋值给两个变量,再拿那两个变量做字符串计算也不行! 我怀疑是ICC的编译器自作聪明把两种方法都一样的编译,结果当然也一样了.
我靠,难道ICCAVR的数组除了数值计算什么都不能干么! 答 2: 字符运算的问题解决了...if (s_buffer[8]=='a' & s_buffer[9]=='b') lenth1=11; 这样写才对...语法没学好,惭愧惭愧.
但是我还是不明白为什么不能给数组赋字符串...特别是前面的两个程序为什么不行... 答 3: 我快疯了...首先从串口收到一组数据,存放在s_buffer[],中然后
.....
lenth1=11;
diplay_in_s_uart(32);//在串口输出S_BUFFER[]的内容。
for (counts=0;counts-32;counts++) s_buffer[counts]=s_buffer[counts+lenth1];
diplay_in_s_uart(32);//在串口输出S_BUFFER[]的内容。
for (counts=0;counts-25;counts++) no[counts]=s_buffer[counts];
diplay_in_no(25);//在串口输出NO[]的内容。
其实很简单,只是把s_buffer[]里的数据左移11位而已,diplay_in_s_uart(32);这个函数的作用就是在另一个串口里把s_uart[]的数据输出.
结果是什么!? 三个disnplay_();函数输出的结果是一样的!只是尾巴长度不同而已! 我FT !
但如果我不是从串口收数据放在S_BUFFER[]中,而是把一个原来就有的一个字符串数组
char debug[]="0123456789ABCDEF0123456789ABCDEF";
赋值给它
for (counts=0;counts-32;counts++) s_buffer[counts]=debug[counts];
然后再
diplay_in_s_uart(32);
for (counts=0;counts-32;counts++) s_buffer[counts]=s_buffer[counts+lenth1];
diplay_in_s_uart(32);
for (counts=0;counts-25;counts++) no[counts]=s_buffer[counts];
diplay_in_no(25);
那就什么问题都没有,位移正常! 我巨FT ! 答 4: to s_buffer[s]是什么意思呢?s++改成s=s+1试试看,s_buffer[]={".........."};是不是要改成(unsigned) char s_buffer[]={".........."};好像你有些基本的东西没搞清楚吧! 答 5: 惭愧,有一年多没碰过C了惭愧,有一年多没碰过C了。
看过书后明白一些了,数组赋值的是S_BUFFER[]=""; 这个是搞清楚了.
但是有一个问题:只能在程序初始化的时候这样定义,不能在函数里这样定义,
S_BUFFER[9]="0123456789"; 这样也不行.好像ANSI C 可以的吧 ?
(2)字符移动失败真的很奇怪.晚上下班了太累了,没精神到AVRSTUDIO里看...晚上看看它怎么编译的...... 答 6: 这个是从双龙的程序来的.谢谢指教!
双龙的例程里的一个写串口的函数:
int puts(char *s)
{
while(*s)
{
putchar(*s);
s++;
}
return 1;
}
.
我把putchar(*s);改成了S_BUFFER[S]=[*S];
不过S_BUFFER[S]=[*S]; 这样确实不妥,晚上我试试再定义一个累加变量来处理S_BUFFER[i]=[*S];
S++: 和S=S+1; 一般没什么大问题的.在好几个地方都是这么写的,没问题.而且编译的时候提示也不是这里出错,出错的地方是数组赋值那句.
熬夜写程序就是不好 :(
在程序开头,我声明了一个全局数组:char s_buffer[260];
我尝试
s_buffer[]={".........."}; 失败,语法非法.
那我一个一个写吧:
int writebuffer(char *s)
{
while(*s)
{
s_buffer[s]=*s;
s++;
}
return 1;
}
不行:: operands of + have illegal types `pointer to char' and `pointer to char'
OK 我变通一下:
int writebuffer(char *s)
{char i;
while(*s)
{i=*s;
s_buffer[s]=i;
s++;
}
return 1;
}
还是不行,同样的错误! : operands of + have illegal types `pointer to char' and `pointer to char'
答 1: 还有更崩溃的情况if (s_buffer[8]=="a" & s_buffer[9]=="b") lenth1=11;
这样都不能编译: operands of == have illegal types `char' and `pointer to char'
就算我用上面的方法先变通一下,先把数组里的两个数赋值给两个变量,再拿那两个变量做字符串计算也不行! 我怀疑是ICC的编译器自作聪明把两种方法都一样的编译,结果当然也一样了.
我靠,难道ICCAVR的数组除了数值计算什么都不能干么! 答 2: 字符运算的问题解决了...if (s_buffer[8]=='a' & s_buffer[9]=='b') lenth1=11; 这样写才对...语法没学好,惭愧惭愧.
但是我还是不明白为什么不能给数组赋字符串...特别是前面的两个程序为什么不行... 答 3: 我快疯了...首先从串口收到一组数据,存放在s_buffer[],中然后
.....
lenth1=11;
diplay_in_s_uart(32);//在串口输出S_BUFFER[]的内容。
for (counts=0;counts-32;counts++) s_buffer[counts]=s_buffer[counts+lenth1];
diplay_in_s_uart(32);//在串口输出S_BUFFER[]的内容。
for (counts=0;counts-25;counts++) no[counts]=s_buffer[counts];
diplay_in_no(25);//在串口输出NO[]的内容。
其实很简单,只是把s_buffer[]里的数据左移11位而已,diplay_in_s_uart(32);这个函数的作用就是在另一个串口里把s_uart[]的数据输出.
结果是什么!? 三个disnplay_();函数输出的结果是一样的!只是尾巴长度不同而已! 我FT !
但如果我不是从串口收数据放在S_BUFFER[]中,而是把一个原来就有的一个字符串数组
char debug[]="0123456789ABCDEF0123456789ABCDEF";
赋值给它
for (counts=0;counts-32;counts++) s_buffer[counts]=debug[counts];
然后再
diplay_in_s_uart(32);
for (counts=0;counts-32;counts++) s_buffer[counts]=s_buffer[counts+lenth1];
diplay_in_s_uart(32);
for (counts=0;counts-25;counts++) no[counts]=s_buffer[counts];
diplay_in_no(25);
那就什么问题都没有,位移正常! 我巨FT ! 答 4: to s_buffer[s]是什么意思呢?s++改成s=s+1试试看,s_buffer[]={".........."};是不是要改成(unsigned) char s_buffer[]={".........."};好像你有些基本的东西没搞清楚吧! 答 5: 惭愧,有一年多没碰过C了惭愧,有一年多没碰过C了。
看过书后明白一些了,数组赋值的是S_BUFFER[]=""; 这个是搞清楚了.
但是有一个问题:只能在程序初始化的时候这样定义,不能在函数里这样定义,
S_BUFFER[9]="0123456789"; 这样也不行.好像ANSI C 可以的吧 ?
(2)字符移动失败真的很奇怪.晚上下班了太累了,没精神到AVRSTUDIO里看...晚上看看它怎么编译的...... 答 6: 这个是从双龙的程序来的.谢谢指教!
双龙的例程里的一个写串口的函数:
int puts(char *s)
{
while(*s)
{
putchar(*s);
s++;
}
return 1;
}
.
我把putchar(*s);改成了S_BUFFER[S]=[*S];
不过S_BUFFER[S]=[*S]; 这样确实不妥,晚上我试试再定义一个累加变量来处理S_BUFFER[i]=[*S];
S++: 和S=S+1; 一般没什么大问题的.在好几个地方都是这么写的,没问题.而且编译的时候提示也不是这里出错,出错的地方是数组赋值那句.
熬夜写程序就是不好 :(
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |