关于strncpy()函数拷贝数组问题

#include
#include

int main ()
{
	char str1[1] = "", str2[]="China";
	strncpy(str1, str2, 1);
	printf("str1 %s\n", str1);
	return 0;
}

以上代码编译后输出“CChina”,觉的很奇怪,整理后笔记如下:
1:字符串数组初始化,会在数组结尾默认添加’\0’,当数组大小为1时,默认添加为’\0’,为其他值会报错,所以字符串数组在初始化时长度为字符串长度加一
2:strncpy拷贝函数拷贝是不会拷贝’\0’,此处拷贝长度为1,故仅拷贝“C”替换了原’\0’
3:此处str内存空间为在栈上,str1‘\0’的内存空间大小为1,因此str1与str2首地址相隔1,strncpy拷贝之后因此str1无’\0’,默认str1会与str2连接输出CChina.
4:栈上在为局部变量分配空间时,遵循内存小的在前,且俩个数组首地址相差0x10(两数组空间大于1);

#include 
#include 

int main ()
{
	char str1[2] = "";
	char str2[6] = "China";
	char chdata = 0x01;
	int a = 0;
	int* p = &a;
	printf("&str1 = %p\n", &str1);
	printf("&str2 = %p\n", &str2);
	printf("&p = %p\n", &p);
	printf("&a = %p\n", &a);
	printf("&chdata = %p\n", &chdata);
}

输出结果如下:

&str1 = 0x7fffe82560e0
&str2 = 0x7fffe82560f0
&p = 0x7fffe82560e8
&a = 0x7fffe82560e4
&chdata = 0x7fffe82560df

你可能感兴趣的:(笔记)