
;呵呵,如此高分,也来凑热闹。
;运行示范如下
;C:\R
;HXGSFHSDG736RU3GRH32867VF847TBF47EHF78CGY4RCY4M8CEW7YDNRG
;GRNDY7WEC8M4YCR4YGC87FHE74FBT748FV76823HRG3UR637GDSHFSGXH
;C:\
;用MASM50编译通过
DATA SEGMENT
DB 512 DUP('$') ;定义可输入的字符个数
BUF DB '$'
CRLF DB 0DH,0AH,24H ;回车换行符
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET BUF ;指针指向待显示字符串尾部
AGAIN:
MOV AH,01 ;输入字符
INT 21H
CMP AL,0DH ;是回车吗
JE DISP ;是,转显示
DEC BX ;指针减1
MOV [BX],AL ;存入输入的字符
JMP AGAIN ;继续输入
DISP:
MOV AH,09 ;显示
MOV DX,OFFSET CRLF ;回车换行
INT 21H
MOV DX,BX ;定位待显示字符串首地址
MOV AH,09
INT 21H ;显示
MOV AH,4CH ;DOS返回
INT 21H
CODE ENDS
END START
#include<iostreamh>
#include<fstreamh>
#include<stringh>
int main()
{
char test[30];
int i;
char fw[30];
//::memset(fw,0,30);
ofstream ofi;
ifstream ifi;
cout<<"请输入你需要的文本:";
cin>>test[30];
cout<<"请输入你所要保存的文件名:";
cin>>fw;
ofiopen(fw);
for(i=0;i<strlen(test[30]);i++)
{
ofi<<test[30];
}
ofi<<endl;
return 0;
}
你的 cin>>fw[30]这句有问题,首先是fw[30]这个空间是未知的你并没有分配,因为fw的 下标直到29其次,你这样只是给fw数组的最后一位赋值了
所以有错误。。
测试案例:
第一次输入 :dddddddddddd
第二次输入:aatxt
那么将在程序所在的文件夹下看到这个文件,并且是正确 的 !
针对楼主的补充提问,我补充说明下,按照楼下的做法是没有错的 ,
但是我 说一下为什么上面我写的有错
char test[30];
这里定义的是指针数组。至于什么是 指针数组,如果你不懂,可以参考有关资料。
那么cin>>test[30];
这句就是你把数据都写到test[30]这个指针指向的 地方了
for(i=0;i<strlen(test[30]);i++)
这句循环的次数是你输入的字符数目,
ofi<<test[30];
而这句将会把你输入的字符都写到文件中 ,放在循环体内,将会不断的输出同样的很多次
所以才出现你说的问题 ,
另外还有一个很严重的问题,第一次写的时候我也没注意,就是cin>>test[30];
有两个问题,
1test[30]这个数组元素你并没有定义,是不能使用的,在这里之所以没有出错误,因为他是一个指针,指向的地方本身是没有有用数据的。如果你的磁盘空间很满,那么这杨写出现的问题的概率就很大了。所以你使用的下标不能>=30;
2test30];
这个指针你并没有给他分配内存,也就是通常所谓的野指针,指向一个未知的地方。应该NEW一个内存
这个指针使用的时候 有的时候会出现问题的。。一定要注意!!
#include <stringh>
void test()
{
char s[20];
gets(s);
if (strcmp(s, "2 3 4 5 6 2 4 6 4 3") == 0)
printf("3833333");
else if (strcmp(s, "2 2 2 2 2 2 2 2 2 2") == 0)
printf("0000000");
}
以上就是关于汇编语言的字符输入/输出程序设计全部的内容,包括:汇编语言的字符输入/输出程序设计、关于用vc++编写文件输入与输出的程序、C语言程序函数的输入与输出等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)