当前位置: 技术问答>linux和unix
求助,一个获取字符及输出问题
来源: 互联网 发布时间:2015-11-07
本文导语: 代码如下,我想获取输入的字符并存入一个结构中,然后再将刚输入的字符显示出来,或循环通过指针 将结构中的字符串输出,不知道什么原因报Memory fault - core dumped 错误 谢谢 #include #include #include #include #...
代码如下,我想获取输入的字符并存入一个结构中,然后再将刚输入的字符显示出来,或循环通过指针
将结构中的字符串输出,不知道什么原因报Memory fault - core dumped 错误
谢谢
#include
#include
#include
#include
#include
#include
typedef struct data_struct{
char *string;
int i;
}data_t;
typedef struct list_struct{
data_t item;
struct list_struct *next;
}list_t;
int get_str(char *dstr);
main(int argc, char *argv[])
{
data_t temp;
list_t *newnode=NULL,*pnewnode;
int i;
char *str=NULL,*pstr=NULL;
fprintf(stderr, "nStartn");
pstr=str;
pnewnode = newnode;
newnode = (list_t*)malloc(sizeof(list_t));
for(i=0; iitem.string);
fprintf(stderr, "nOut put String %sn", newnode->item.string);
newnode++;
newnode = (list_t*)malloc(sizeof(list_t));
}
// for(i=0; iitem.string);
// pnewnode++;
}
fprintf(stderr, "nInput a string:");
exit(0);
}
int get_str(char *dstr){
char *string;
int ch;
string = (char*)malloc(1);
dstr = string;
while(1)
{
ch = getchar();
if (ch!=27 && ch!='@')
*(string++) =(char)ch;
else
break;
}
// fprintf(stderr, "%s", dstr);
return 0;
}
将结构中的字符串输出,不知道什么原因报Memory fault - core dumped 错误
谢谢
#include
#include
#include
#include
#include
#include
typedef struct data_struct{
char *string;
int i;
}data_t;
typedef struct list_struct{
data_t item;
struct list_struct *next;
}list_t;
int get_str(char *dstr);
main(int argc, char *argv[])
{
data_t temp;
list_t *newnode=NULL,*pnewnode;
int i;
char *str=NULL,*pstr=NULL;
fprintf(stderr, "nStartn");
pstr=str;
pnewnode = newnode;
newnode = (list_t*)malloc(sizeof(list_t));
for(i=0; iitem.string);
fprintf(stderr, "nOut put String %sn", newnode->item.string);
newnode++;
newnode = (list_t*)malloc(sizeof(list_t));
}
// for(i=0; iitem.string);
// pnewnode++;
}
fprintf(stderr, "nInput a string:");
exit(0);
}
int get_str(char *dstr){
char *string;
int ch;
string = (char*)malloc(1);
dstr = string;
while(1)
{
ch = getchar();
if (ch!=27 && ch!='@')
*(string++) =(char)ch;
else
break;
}
// fprintf(stderr, "%s", dstr);
return 0;
}
|
int get_str(char *dstr){
char *string;
int ch;
string = (char*)malloc(1);
dstr = string; //这里改的dstr是局部变量
需要用两个**,即int get_str(char **dstr),然后 *dstr = string
恭喜楼主的C语言编程已经进入两*级 :)
char *string;
int ch;
string = (char*)malloc(1);
dstr = string; //这里改的dstr是局部变量
需要用两个**,即int get_str(char **dstr),然后 *dstr = string
恭喜楼主的C语言编程已经进入两*级 :)
|
确实搞不懂楼主想做什么,为什么要自己一个一个去处理字符串呢?
fgets
fputs
不是很好用吗?
while(1)
{
ch = getchar();
if (ch!=27 && ch!='@')
*(string++) =(char)ch;
else
break;
}
这段之前,你只为string分配了一个空间,你后来在没有继续分配空间的情况下就string++,这好象不合理吧!
fgets
fputs
不是很好用吗?
while(1)
{
ch = getchar();
if (ch!=27 && ch!='@')
*(string++) =(char)ch;
else
break;
}
这段之前,你只为string分配了一个空间,你后来在没有继续分配空间的情况下就string++,这好象不合理吧!
|
这个地方好象也有问题
newnode++;//这是什么意思?如果malloc是连续分配的空间也许行得通,但是之前你只分配了一list_struct空间。
newnode = (list_t*)malloc(sizeof(list_t));
newnode++;//这是什么意思?如果malloc是连续分配的空间也许行得通,但是之前你只分配了一list_struct空间。
newnode = (list_t*)malloc(sizeof(list_t));