我如何从读取中获取ascii字符?
How do i get ascii character from read?
在这个程序中,我需要将我读取的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]++;
}
}
}
int c
创建一个大概 4 个字节的变量。它没有被初始化,因此它可能包含任何垃圾。
然后系统调用
read(fd,&c,1)
更改这些字节之一,可能是最高或最低,同时保持其他字节不变。现在你有 3 个字节的随机垃圾加上来自 fd 的一个字节的组合,放在 c 的某个地方。
然后您尝试从该组合中获得意义。
如果将 c 定义为 char
:
,事情可能会更好
char c;
在这个程序中,我需要将我读取的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]++;
}
}
}
int c
创建一个大概 4 个字节的变量。它没有被初始化,因此它可能包含任何垃圾。
然后系统调用
read(fd,&c,1)
更改这些字节之一,可能是最高或最低,同时保持其他字节不变。现在你有 3 个字节的随机垃圾加上来自 fd 的一个字节的组合,放在 c 的某个地方。
然后您尝试从该组合中获得意义。
如果将 c 定义为 char
:
char c;