这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ICCAVR ICCAVR问题:字符型数组赋进行字符串运算

共2条 1/1 1 跳转至

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

院士
2006-09-17 18:14:16     打赏
ICCAVR ICCAVR问题:字符型数组赋进行字符串运算



关键词: ICCAVR     问题     字符型     数组     进行     字符串         

院士
2006-12-22 22:43:00     打赏
2楼
问 由于调试程序,需要对一个字符型数组写入一个字符串,并且需要进行字符串计算.
在程序开头,我声明了一个全局数组: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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]