高版本VS中(VS2017 ,VS2019)
#include
int main()
{
char* str ="1234";
//printf("%s\n", str);
std::cout << str << std::endl;
return 0;
}
此语句带来的问题,对于新标准来说,这是不允许的。
解决方法,按如下进行修改:
1:在项目属性中 ,把符合模式更改为 ‘否’
2:使用强制类型转换:
//char* p1 = "1234";
char* p1 = (char *)"1234";
3:使用数组首地址赋值指针
char str[10] = "123";
char* s1 = str;
具体原原因 个人理解 C++ 语法检测很严格 ,赋值或初始化类型必须一致,看下面代码
char ch1[] = "123";
cout << typeid(ch1).name() << endl;
char* pstr = nullptr;
cout << typeid(pstr).name() << endl;
auto s1 = "1234";
cout << typeid(s1).name() << endl;
输出:变量类型都不一致 ,所以要设定兼容性或者 强制转换。
配置输出文件目录:
参考:https://blog.csdn.net/weixin_41049188/article/details/105323625
C语言中没有特定的字符串类型,常用以下两种方式定义字符串:一种是字符数组,另一种是指向字符串的指针。如下:
char str[] = “happy”;
char *str = “happy”;
这种方式有什么不同呢?
示例一:字符数组
#include
int main(void)
{
char str[20] = "hello";
str[0] = 'H';
printf("%s\n",str);
return 0;
}
运行结果:
Hello
示例二:指向字符串的指针
#include
int main(void)
{
char *str = "hello";
str[0] = 'H';
printf("%s\n",str);
return 0;
}
运行结果:
无打印信息输出
可见:
内存的分配方式:
内存分配可分为三种:静态存储区、栈区、堆区。
1、静态存储区:该内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,它主要存放静态数据、全局数据和常量。
2、栈区:它的用途是完成函数的调用。在执行函数时,函数内局部变量及函数参数的存储单元在栈上创建,函数调用结束时这些存储单元自动被释放。
3、堆区:程序在运行时使用库函数为变量申请内存,在变量使用结束后再调用库函数释放内存。动态内存的生存期是由我们决定的,如果我们不释放内存,就会导致内存泄漏。