C/C++,指针和字符串的一点小问题
typedefstructFileStruct{char*ch;structFileStruct*next;}FileStruct;FileStruct*p;为ch申请了...
typedef struct FileStruct
{
char *ch;
struct FileStruct *next;
}FileStruct;
FileStruct *p;
为ch申请了80个字符的空间(超出80字符的话要存到下一节点中),想一个字符一个字符的读到ch中,但是我过程中移动了ch,导致我输出的时候只能输出最后一个字符,我用p->ch[XX]输入,但是输出的时候剩余的空间里输出乱码。我希望使用p->ch直接输出全部字符,求方法。
额,还需要读入回车键 展开
{
char *ch;
struct FileStruct *next;
}FileStruct;
FileStruct *p;
为ch申请了80个字符的空间(超出80字符的话要存到下一节点中),想一个字符一个字符的读到ch中,但是我过程中移动了ch,导致我输出的时候只能输出最后一个字符,我用p->ch[XX]输入,但是输出的时候剩余的空间里输出乱码。我希望使用p->ch直接输出全部字符,求方法。
额,还需要读入回车键 展开
3个回答
展开全部
为ch多申请一个字符空间,写入数据时,如果达到80,则第81位写'\0',这样表示存储了一个字符串,这样直接cout << p->ch ;就不会有问题了。
如果最后一个结点不足80个字符,则p->ch[XX+1]=‘、0’; 这样就不会输出乱码了。
如果最后一个结点不足80个字符,则p->ch[XX+1]=‘、0’; 这样就不会输出乱码了。
追问
其实最终的目的是操作一个记事本一样的程序,后续要求是可以移动插字符在任意地方再输入文字,如果都设为空格键,那这个后续不是出现了问题?
追答
如果你不是定义的字符串类型,就不能直接调用cout ch; 这样来输出数据。
'\0'表示的不是空格,是字符串结束符。
对于你移动、插入数据操作,你可以在不影响字符串数据结构的情况下进行程序处理。
当然,你这种方法处理记事本的功能,不是很爽。可以说,问题是你解决方法的不当造成的。
可以考虑换另外的方法来实现,如用String类型来实现。
展开全部
#include <iostream.h>
typedef struct FileStruct {
char *chs;
struct FileStruct *next;
}FileStruct;
int main() {
int i = 0;
char *p;
FileStruct myfile;
myfile.chs = new char[80];
cin.getline(myfile.chs,80);
p = myfile.chs;
while(myfile.chs[i])
cout << myfile.chs[i++];
cout << endl;
myfile.chs = p;
cout << myfile.chs << endl;
return 0;
}
追问
谢谢回答,但是这样的话80个字符之后的输入就没办法存入下一节点了,所以我觉得不能直接使用cin.getline。还有别的办法吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-28
展开全部
自己写个get_word( char*, int limit) 函数应该就行了吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询