首页 DSP技术 嵌入式开发 电源技术 单片机学习 IC设计 工业自动化 无线通讯技术 嵌入式实时操作系统
驱动开发 CAN总线 EDA技术 PCB设计 8051单片机 MSP单片机 PIC单片机
AVR单片机 ARM学习 LED论坛 FPGA论坛 周立功单片机 mp3开发 Flash闪存 手机方案

首页->AVR单片机->正文

ICCAVR问题:字符型数组赋进行字符串运算

上篇: 昨天买了eeprom,不会用,大家能帮我吗?
下篇: 请教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; 一般没什么大问题的.在好几个地方都是这么写的,没问题.而且编译的时候提示也不是这里出错,出错的地方是数组赋值那句.

熬夜写程序就是不好 :(

相关资料:

 ICP是不是涨价了? 程序还没有进入到main,就跳到数据中止了!
 7290的用法 今天看资料发现LPC2210的一个设计问题,高手进来说明
 PCF8576的功耗能不能降到20UA zlg7290里面的所有寄存器都是可读可写的吗?
 请问内部的EEPROM 求助:使用AT45DB081遇到的问题.
 写STC单片机FLASH的最好办法 STC MCU 商业版与工业版主要有哪些区别?
 STC和89S52对比实验 STC你哪有3.8元的单片机啊
 无线(非接触式)ISP就好了 想搞自己的isp
 求助关于ISP电路的问题 目前中发的一块89c52的仿真板大概多少钱

Copyright © 2005-2006 电子技术学习网 和 电子电路图网 均为 单片机设计网旗下网站