读书人

求解释 乱码有关问题

发布时间: 2013-03-29 14:24:52 作者: rapoo

求解释 乱码问题
程序:
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进制数据!

读书人网 >C语言

热点推荐