首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求解释 乱码有关问题

2013-03-29 
求解释乱码问题程序:FILE *fp fopen(a.txt,w)FILE *fp1 fopen(b.txt,w)char name[10],passw

求解释 乱码问题
程序:
   FILE *fp = fopen("a.txt","w");
FILE *fp1 = fopen("b.txt","w");

char name[10],password[6];
int j=0;
int ch=0;
srand(time(NULL));
for (int i = 0;i < 9;i++)
{
name[i] = rand()%9;
}
printf("\n你的账号为:\n");
for (int i = 0;i < 9;i++)
{
printf("%d",name[i]);
}
printf("\n输入密码:\n");
for (j = 0;j < 6;j++)
{
do 
{
ch = getch();
} while (!(isdigit(ch)));
printf("*");
password[j] = ch;
}
fprintf(fp,"%s",name);
fprintf(fp1,"%s",password);
fflush(stdin);
printf("\n账号注册成功!\n");
fclose(fp);
fclose(fp1);

return 0;

在文件中出现  121212烫烫烫烫烫   这样的乱码??怎么解释???
[解决办法]
6位密码的话
password[6];
改为
password[6 + 1];
[解决办法]
字符串结尾缺少结束符'\0'。定义空间时要预留一个结束符的大小
[解决办法]
char name[10] = {0},password[7] = {0};  // 要初始化,长度要预留结束符

注释掉这句 password[j] = ch;

[解决办法]

引用:
char name[10] = {0},password[7] = {0};  // 要初始化,长度要预留结束符

注释掉这句 password[j] = ch;
看错了,不能注掉这句 password[j] = ch;

[解决办法]
我感觉是类型转换出错了
[解决办法]
password初始化做了如下更改:

password[6+1] = {0};

代码其他地方不变。
[解决办法]
引用:
引用:引用:程序:
   FILE *fp = fopen("a.txt","w");
FILE *fp1 = fopen("b.txt","w");

char name[10],password[6];
int j=0;
int ch=0;
srand(time(NULL));
for ……
这样可以用
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string>
FILE *fp = fopen("a.txt","w");
FILE *fp1 = fopen("b.txt","w");

int main()
{
char name[10],password[7],pname[10];
int j=0;
int ch=0;
srand(time(NULL));
for (int i = 0;i < 9;i++)
{
name[i] =rand()%9+'0';
}
name[9]='\0';
printf("\n你的账号为:\n");
for (int i = 0;i < 9;i++)
{
pname[i]=name[i]-'0';
printf("%d",pname[i]);
}
printf("\n输入密码:\n");
for (j = 0;j < 6;j++)
{
do 
{
ch = getchar();
} while (!(isdigit(ch)));
printf("*");
password[j] = ch;
}
password[6]='\0';
fprintf(fp,"%s",name);
fprintf(fp1,"%s",password);
fflush(stdin);
printf("\n账号注册成功!\n");
fclose(fp);
fclose(fp1);

return 0;
}

------解决方案--------------------


char name[10] = {0};
char password[6 + 1] = {0};
[解决办法]
出现 烫烫烫烫烫烫烫 这玩意的 基本就是数组没有置'\0'
[解决办法]

引用:
引用:出现 烫烫烫烫烫烫烫 这玩意的 基本就是数组没有置'\0'

编译器 不是会自动加一个\0吗??


我说的是数组初始化 把每一位都清空 跟你说的那个不一样 
再一个'0' 是数字0对应的ascii 不是0  
'\0'才是0
[解决办法]
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

不要把
fopen("...","...");fscanf,fprintf,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

fopen("...","...b");fread,fwrite,fclose  //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
弄混了

对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode:0x4A 0x55,UTF-8:0xE5 0x95 0x8A

[解决办法]
打印16进制数据!

热点排行