在这个程序中,我需要存储我在数组中读取的ascii字符的频率(为了打印最频繁的)。问题是我从read中得到的不是ascii(很可能是某种地址)所以在buf []数组中我越界了。 任何人都可以告诉我这个吗?
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<strings.h>
#define MODEMDEVICE "/dev/ttyAMA0"
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE;
int main()
{
int fd,c, res=0,i;
struct termios oldtio,newtio;
int buf[128] ;
for (i=0;i<128;i++) buf[i]=0;
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
if (fd <0) {perror(MODEMDEVICE); exit(-1); }
tcflush(fd, TCIFLUSH);
while (STOP==FALSE) { /* loop until we have a terminating condition */
int r=read(fd,&c,1);
write(1,&c,1);
if (c=='\n') {
for(i=0;i<128;i++)
if (res < buf[i] )
res = buf[i];
printf("first char %d \n", res);
}
else {
buf[c]++;
}
}
}
答案 0 :(得分:2)
int c
创建一个大约4个字节的变量。它没有初始化,因此它可能包含任何垃圾。
然后系统调用
read(fd,&c,1)
更改其中一个字节,可能是最高或最低,而其他字节保持不变。现在你有3个字节的随机垃圾加上fd新鲜的一个字节,放在c的某个地方。
然后你试着理解这个组合。
如果将c定义为char
:
char c;