这个c语言入门经典程序麻烦帮忙检查下为什么会出现这种情况?

这是我自己编的一个实现在linux gcc下的my_getline函数,麻烦懂C语言的指点一下
这个程序哪里出了问题,为什么得不到正确的结果呢 - 代码贴 - BCCN
#include &stdio.h&
#include &stdlib.h&
#define maxsize 20
static ssize_t
mygetline(char **lineptr, size_t *n, FILE *stream)
ssize_t count=0;
if(*lineptr == NULL)
free(*lineptr);
*n=maxsize;
*lineptr = malloc(*n);
if((buf=fgetc(stream))==EOF)
return -1;
while((buf=fgetc(stream))!=EOF)
if(buf=='\n')
*(*lineptr+count-1)=buf;
*(*lineptr+count)='\0';
if(*n&=count)
*lineptr=realloc(*lineptr,count*2);
return count;
int main(int argc,char *argv[])
char *linebuf;
size_t linesize;
fp = fopen(argv[1],&r&);
if(fp == NULL)
perror(&fopen()&);
linebuf = NULL;
linesize = 0;
if((n= mygetline(&linebuf,&linesize,fp)) & 0)
printf(&%d\n&,n);
printf(&%s\n&,linebuf);
if(linebuf)
free(linebuf);
fclose(fp);帮忙看下以下的C语言程序,哪里有问题了,为什么Linux上编译执行会出现段错误呢?求助。。、。_百度知道
帮忙看下以下的C语言程序,哪里有问题了,为什么Linux上编译执行会出现段错误呢?求助。。、。
#include &stdio.h&#include &string.h&int main(void){
char a[6]={0x11,0x22,0x33,0x44,0x55,0x66};
char c[33];
printf(&%x&,a[1]);
printf(&%x&,a[3]);
strcpy(c,a);
printf(&%x&,c[1]);
printf(&%x&,c[3]);
return 1;}
Linux编译是没有问题的
就是执行的时候出现段错误。。你们可以试下。。。但是这程序在VC++上面测是没有问题的。正常编译,正常执行
提问者采纳
可能是strcpy(c,a);时越界,a中直到遇到'\0'才会拷贝结束,你试试把a最后一个设为'\0'
提问者评价
其他类似问题
按默认排序
其他3条回答
脚本是没问题的linux下执行c先gcc 编译c文件 再执行编译后的.out文件
你装gcc了吗
在Linux上面的话
可以编译,但不能执行的
你的执行方式是什么
文件给执行权限了吗
@liyungx:strcpy字符串赋值,找到'\0'视为字符串结尾。故在a后面加个0即&char&a[]={0x11,0x22,0x33,0x44,0x55,0x66,0x00};@Linux开发师陈龙:编译链接之后记得chmod +x filename使之可执行
恩,段错误一般是涉及到内存错误了。strcpy是不是有问题?
c语言程序的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁帮忙检查一个c语言程序:将一个十六进制整数转化成十进制整数的程序。_百度知道
帮忙检查一个c语言程序:将一个十六进制整数转化成十进制整数的程序。
#include&stdio.h&#include&string.h&#include&math.h&void main(){ void func(char s[],int ); char a[20]; printf(&请输入一串十六进制数:&); scanf(&%s&,a); n=strlen(a); func(a,n); printf(&%s&,a);}void func(char s[],int x){ for(i=x-1;i&=0;i--){
if(s[i]&='0'&&s[i]&='9'){
s[i]=(s[i]-'0')*pow(16,i-x-1);
if(s[i]&='a'&&s[i]&='f'){
s[i]=(s[i]-'a'+10)*pow(16,i-x-1);
if(s[i]&='A'&&s[i]&='F'){
s[i]=(s[i]-'A'+10)*pow(16,i-x-1);
} }}我觉得在赋值给s[i]出了问题,但是不会改了。。。
提问者采纳
程序有以下两个问题:1、func函数中所有的i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-12、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数具体代码见下#include&stdio.h&#include&string.h&#include&math.h&int func(char s[],int x);void main(){ char a[20]; printf(&请输入一串十六进制数:&); scanf(&%s&,a);
n=strlen(a);
num=func(a,n); printf(&%s=%d&,a,num);}int func(char s[],int x){ int num=0; for(i=x-1;i&=0;i--) {
if(s[i]&='0'&&s[i]&='9')
num+=(int)((s[i]-'0')*pow(16,x-i-1));
if(s[i]&='a'&&s[i]&='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
if(s[i]&='A'&&s[i]&='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
提问者评价
谢谢啦 哈哈
其他类似问题
按默认排序
其他1条回答
pow(16, i-x+1) 另外,不要用s[i]保存结果,s[i]只是一个字符就一个字节,最大127建议你用int保存结果
十六进制的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁麻烦帮忙看看这个c语言程序。解决问题有加分。 有这么一个文件,其内容如下:_百度知道
麻烦帮忙看看这个c语言程序。解决问题有加分。 有这么一个文件,其内容如下:
c FORTRAN 语言:1 IF A=13 THEN GOTO 3 12.42 A=123ojd3 I F A=123 THEN B=A
1 ELSE GOTO 2
我定义了一个二维字符数字buffer[i][j](i=10, j=71),i代表行号,共10行;j代表列号,共71列。但是文件共有80列。假设读到buffer[0][70]时,我不想再继续读取这一行的内容,而是想从下一行开始继续读取,即从buffer[2][0]开始读下一行,我该怎么实现呢?另外,如果能实现的话,每行的最后一个字符,也就是buffer[i][70]是什么呢?能不能让每行的这个字符都一样?
注意:上面的只是文件内容,并不是C程序。关键是用C语言解决我遇到的问题。麻烦各位大虾帮帮忙啦~~~急
我有更好的答案
你这哪里是 C 语言程序啊!
可以把这段程序写清楚点吗?
上面的内容只是文件内容,不是重点。关键是我要用c语言来读这个文件。我遇到的问题该怎么解决啊?
你是要怎么解决这个问题呢?得出最终答案吗?
不是,是想让大家帮我想一个方法解决我的问题,具体代码我自己实现。如果说不清楚的话,写代码也行。谢谢啦
stdio.h& void f( int* a){
while (a[i]&=10)
printf(&%3d&,a[i]);
}}void main(){
int a[] = ;
f(a+1);}你的意思是不是这样??
我没看懂你的代码。我的意思是:想读取文件,读i行,每行j(71)列。可是每行有80列。当读到71列的时候,这一行71之后的内容就不再读了,而是从下一行的第一列开始,再读71列。关键是怎么从这一行的71列转到下一行的第一列。
这样你可以用两层循环,在里层循环你想停止大地方加上break,然后再里层循环的外面加上一个你想读入的那个字符,不就可以保证每行的结尾处都一样了吗。不知道你说的是不是这个意思。
两层循环我尝试过了,但问题是,如何从上一行的71列跳转到下一行的第一列,这个问题该怎么解决。
在里层用break不就直接跳到外层也就是下一行了吗,只要不到最后一行不就又从第一列开始了吗。
其他类似问题
c语言程序的相关知识
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁麻烦C语言高手帮忙看一下这个程序_百度知道
麻烦C语言高手帮忙看一下这个程序
题目是要求10个数去掉最大和最小求平均我自己编的代码是int sum(int a[10]){
int z=0,i,j=0;
for(i=0;i&10;i++)
}}int highest(int a[10]){
int z=0,i,j=0;
for(i=0;i&10;i++)
if(z&a[i])
}}int lowest(int a[10]){
int z=100,i,j=0;
for(i=0;i&10;i++)
if(z&a[i])
int a[10],i,j=0,x,y;
printf(&please print a score for ***&);
for(i=0;i&10;i++)
scanf(&%d&,&a[i]);
x=highest(a);
y=lowest(a);
z=(sum(a)-x-y)/8.0;
printf(&\n&);
printf(&%f&,z);
getch();}能编译,但是结果总是不对,麻烦高手帮忙看下~
改成int a[]结果也是那个样子~
提问者采纳
我运行的没问题。
提问者评价
其他类似问题
高手帮忙的相关知识
其他3条回答
三个函数的参数那里,建议改成int a[]试试
int sum(int a[10]){
int z=0,i;
for(i=0;i&10;i++)z+=a[i];}int highest(int a[10]){
int z=0,i;
for(i=0;i&10;i++)if(z&a[i])z=a[i];}int lowest(int a[10]){
int z=100,i;
for(i=0;i&10;i++)if(z&a[i])z=a[i];}main(){
int a[10],i,x,y;
printf(&please print a score for ***&);
for(i=0;i&10;i++)scanf(&%d&,&a[i]);
x=highest(a);
y=lowest(a);
z=(sum(a)-x-y)/8.0;
printf(&\n%f\n&,z);
#include &iostream&void main(){ int max,min,date[10],sum=0; cout&&&请输入10个数\n&; for(int i=0;i&10;i++) {
cout&&i+1&&&=====&;
cin&&date[i];
sum+=sum+date[i]; } max=min=date[0]; for(i=1;i&10;i++) {
if(max&date[i])
max=date[i];
else if(min&date[i])
min=date[i]; } avg=(sum-max-min)/8.0; cout&&&最大数:&&&max&&endl&& cout&&&最小数:&&&min&&endl&& cout&&&平均数:&&&avg&&endl&&}
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言 的文章

 

随机推荐