问题
这段时间遇到过两次这种情况了,一次是输出int类型数组出现乱码,一次是输出字符串出现乱码:
解决
对于上述问题或者类似问题只需要:
方法一:
memset 函数用于将指定内存块的每个字节设置为指定值。它的函数原型如下:
void *memset(void *ptr, int value, size_t num);
它接受三个参数:
ptr:要设置值的内存块的起始地址。
value:要设置的值,即要用来填充内存块的字节。注意,value 参数的类型是 int,但实际上只使用了其最低有效字节(即 value 的低8位)。
num:要设置的字节数,即要设置值的内存块的大小。
memset 函数返回一个指向内存块起始地址的指针。
字符串使用前请使用清空语句把垃圾内存清理成’\0’,也就是0x00(0):
memset(str2, 0x00, sizeof(str2));
实例:
本来逆序输出数组ch包含一部分乱码,但是在操作这个数组前先加入这个函数清空一下内存就好了:
#include<stdio.h>
#include<string.h>
#define MAXLENTH 100
int main(){
char ch[MAXLENTH];
int n;
int i;
memset(ch, 0x00, sizeof(ch));//在使用前清空数组ch内存
printf("请输入一个字符串\n");
scanf("%s",ch);
printf("这个字符串为:%s\n",ch);
n = sizeof(ch) / sizeof(char);
printf("这个字符串倒序为:\n");
for(i=n-1;i>=0;i--){
putchar(ch[i]);
}
printf("\n");
return 0;
}
输入:abcde
输出:
请输入一个字符串
abcde
这个字符串为:abcde
这个字符串倒序为:
edcba
方法二:
对数组进行初始化即可:
char ch[MAXLENTH] = {0};