VS调试、debug,release、栈区底层简单介绍,好的代码,以及const修饰指针变量以及strcpy函数的仿写
调试的快捷键
#include
int main()
{
int i = 0;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (i = 1; i <= 12; i++)
{
arr[i] = 0;
printf("hehe\n");
}
// i 与 arr 都是局部数据,都会放到栈区
// 栈区的使用习惯是先高地址,再低地址
// 所以,i 是 高地址, arr 是低地址
// 但是 arr 数组的下标是由低地址到高地址
// 所以给一定情况的越界,会导致 arr 和 i 的是同一个地址
// 所以 i 会不断地重置为0 ,会陷入死循环。
return 0;
}
int main()
{
int a = 0;
int n = 0;
const int* p = &a;
//*p = 0; // err
p = &n; // right
reutrn 0;
}
int main()
{
int a = 0;
int n = 0;
int* const p = &a;
*p = 0; // right
//p = &n; // err
reutrn 0;
}
#include
// strcpy函数的仿写
void my_strcpy(char* dect, char* ret)
{
while (*ret != '\0')// ret中若找到\0则跳出循环,此时*ret已经时\0,再次赋值就可以将\0也拷贝到dect中
{
*dect = *ret;
dect++;
ret++;
}
*dect = *ret;
}
int main()
{
char arr1[20] = "XXXXXXXXXXXXXX";
char arr2[] = "hello bit";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
#include
// strcpy函数的仿写
void my_strcpy(char* dect, char* ret)
{
while (*ret != '\0')
{
*dect++ = *ret++;
}
*dect = *ret;
}
int main()
{
char arr1[20] = "XXXXXXXXXXXXXX";
char arr2[] = "hello bit";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
#include
// strcpy函数的仿写
void my_strcpy(char* dect, char* ret)
{
while (*dect++ = *ret++)
{
;
}
}
int main()
{
char arr1[20] = "XXXXXXXXXXXXXX";
char arr2[] = "hello bit";
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
#include
#include
// strcpy函数的仿写
void my_strcpy(char* dect, const char* ret)
{
assert(dect != NULL);
assert(ret != NULL);
while (*dect++ = *ret++)// ret中若找到\0则跳出循环,此时*ret已经时\0,再次赋值就可以将\0也拷贝到dect中
{
;
}
}
int main()
{
char arr1[20] = "XXXXXXXXXXXXXX";
char arr2[] = "hello bit";
char p = NULL;
//my_strcpy(arr1, p); // 错误示例
//my_strcpy(arr2, arr1); // 会报错
my_strcpy(arr1, arr2);
printf("%s", arr1);
return 0;
}
VS调试、debug,release、栈区底层简单介绍,好的代码,以及const修饰指针变量以及strcpy函数的仿写