|
问题: 由于调试程序,需要对一个字符型数组写入一个字符串,并且需要进行字符串计算. 在程序开头,我声明了一个全局数组: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; 一般没什么大问题的.在好几个地方都是这么写的,没问题.而且编译的时候提示也不是这里出错,出错的地方是数组赋值那句.
熬夜写程序就是不好 :(
|