VS中出现“读取字符串字符时出错”&“0Xcccccccc”&指针的初始化

示例程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {
	char dest[] = "Hello A World";
	char sour= 'A'; //定义字符变量,并初始化
	char ch_temp; //定义字符变量
	char *TEMP; //定义字符指针,但是其“值”为乱码,也即“野指针”
	char *ptemp = NULL;  //定义字符指针,并初始化为NULL
	char *PTEMP = 0; //定义字符指针,并初始化为0
	char *PTemp = (char *)malloc(sizeof(char)); //通过malloc函数在堆上面分配内存,
	int  in_temp; //定义一个整形变量,但为初始化
	int in_TEMP = 1; //定义一个整形变量,并初始化
	return 0;
}

调试结束时,变量情况:

分析:

1、定义变量,未初始化:

char ch_temp 、int in_temp 为初始化,在Debug模式下,debug是将每个字节位都赋成0xcc,因此 ch_temp为0Xcc、in_temp为0xcccccccc;

2、定义指针变量,未初始化:

char *TEMP

在 Debug 模式下,VC 会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当字符串看就是 “烫烫烫烫……”


因此,在定义变量是,要及时初始化!

定义指针变量时,两种方式对待:

扫描二维码关注公众号,回复: 10375367 查看本文章

(1)、定义指针变量,临时不用指针变量:将指针变量置NULL/0;就是将指针变量置为空指针;在用到的时候,然后用malloc、free函数在堆上面进行内存分配和释放;

(2)、定义指针变量,并且用到指针变量:直接用malloc、free函数在堆上面进行内存分配和释放

示例如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
	char *TEMP; //定义字符指针,但是其“值”为乱码,也即“野指针”
	char *ptemp = NULL;  //定义字符指针,并初始化为NULL
	char *PTEMP = 0; //定义字符指针,并初始化为0

	//先定义,并将指针置空,后面用的时候,在malloc分配内存
	char *PTemp = NULL;
	PTemp = (char *)malloc(sizeof(char));  
	//先定义,并将指针置空,后面用的时候,在malloc分配内存
	char *PTEmp = 0;
	PTEmp = (char *)malloc(sizeof(char));  
	//直接定义并通过malloc函数在堆上面分配内存,
	char *PTEMp = (char *)malloc(sizeof(char)); 
 
	return 0;
}

指针初始化的范例:

示例程序:

(1)

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int* a;
	*a = 1;
	system("pause");
	return 0;
}

解析:整型指针变量a,没有初始化;既指针a存放地值(地址)为随机值,也就是平常说的“野指针”;

运行结果:

(2)

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int* a = NULL;
	*a = 1;
	printf("*a=%d\n",*a);
	system("pause");
	return 0;
}

分析:这是因为NULL指针是一个特殊的指针变量,不指向任何内存,用来表示这个指针目前未指向任何位置。
所以对NULL指针进行解引用操作是非法的。
对指针进行解引用之前,要确定它不是NULL指针!

运行结果:无任何输出结果!

(3)

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n = 0;
	int* a = NULL;
	a = &n;
	*a = 1;
	printf("*a=%d	n=%d\n",*a, n);
	system("pause");
	return 0;
}

分析:首先对整型指针变量a初始化,指向NULL;然后将其指向整形变量n,因此,整型指针变量a的值为变量n的地址,有效!

运行结果:

参考链接:

VS2013 调试时的 0xCCCCCCCC 读取字符串的字符时出错

指针的初始化

发布了103 篇原创文章 · 获赞 38 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wuwuku123/article/details/104897719