#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define BUFSIZE 100
int main(void)
{
char buf[BUFSIZE];
memset(buf,0,BUFSIZE);
puts("!!!Hello c World!!!"); /* prints !!!Hello World!!! */
int n;
while((n = read(STDIN_FILENO,buf,BUFSIZ)) > 0)
{
if(write(STDOUT_FILENO,buf,n) != n)
{
perror("write error");
}
}
if(n < 0)
{
perror("read error");
}
return EXIT_SUCCESS;
}
把输入的内容显示到输出上
我现在想用输入输出重定向
./a.out < t1.c > temp
结果core了,
现在想用gdb调试,
gdb a.out <t1.c > temp
这样的用法是错误的,后百度
发现用法如下
gdb a.out
run <t1.c>temp
但还是报错
(gdb) run <t1.c >temp
Starting program: /home/mct/cpp/a.out <t1.c >temp
read error: Bad address
Program exited normally.
请高人帮看下该如何调试
5 个解决方案
#1
不知道gdb怎么定向
你程序中的宏用错了
while((n = read(STDIN_FILENO,buf, BUFSIZ)) > 0)
你这儿使用的是BUFSIZ(这个是系统定义的一个宏,通常是4096),而不是你自己定义的BUFSIZE
你程序中的宏用错了
while((n = read(STDIN_FILENO,buf, BUFSIZ)) > 0)
你这儿使用的是BUFSIZ(这个是系统定义的一个宏,通常是4096),而不是你自己定义的BUFSIZE
#2
我自己重新定义一个宏难道不可以吗?
#3
可以啊,你倒是用啊,你为什么用系统的呢??
#4
...
#define BUFSIZE 100 //这里你自己定义的宏是BUFSIZE,不是BUFSIZ
int main(void)
{
char buf[BUFSIZE]; //这里数组长度为100
memset(buf,0,BUFSIZE);
puts("!!!Hello c World!!!"); /* prints !!!Hello World!!! */
int n;
while((n = read(STDIN_FILENO,buf,BUFSIZ)) > 0) //这里的BUFSIZ是系统定义的,我的linux环境下是8192,远大于buf的长度100,所以core了,改成你自己的BUFSIZE就OK了
...
#5
感谢大家的帮忙,是自己马虎了。
#1
不知道gdb怎么定向
你程序中的宏用错了
while((n = read(STDIN_FILENO,buf, BUFSIZ)) > 0)
你这儿使用的是BUFSIZ(这个是系统定义的一个宏,通常是4096),而不是你自己定义的BUFSIZE
你程序中的宏用错了
while((n = read(STDIN_FILENO,buf, BUFSIZ)) > 0)
你这儿使用的是BUFSIZ(这个是系统定义的一个宏,通常是4096),而不是你自己定义的BUFSIZE
#2
我自己重新定义一个宏难道不可以吗?
#3
可以啊,你倒是用啊,你为什么用系统的呢??
#4
...
#define BUFSIZE 100 //这里你自己定义的宏是BUFSIZE,不是BUFSIZ
int main(void)
{
char buf[BUFSIZE]; //这里数组长度为100
memset(buf,0,BUFSIZE);
puts("!!!Hello c World!!!"); /* prints !!!Hello World!!! */
int n;
while((n = read(STDIN_FILENO,buf,BUFSIZ)) > 0) //这里的BUFSIZ是系统定义的,我的linux环境下是8192,远大于buf的长度100,所以core了,改成你自己的BUFSIZE就OK了
...
#5
感谢大家的帮忙,是自己马虎了。