C++的学习记录 - 0
最近玩Arduino发现,在编写函数库的时候要用到C++。正好手头有一本教材,于是时隔2年,开始重学。
又看到重载、构造、拷贝这些词竟然还有些小兴奋。
开个系列日志记录一下学习过程中的问题和体会。
看到输入输出的时候想到了C++对C的兼容性,于是试了一下printf函数。
# include<iostream>
# include<stdio.h>
using namespace std; int main()
{
cout<<"C++ iostream"<<endl;
printf("C standard io"); return ;
}
果然还是不错的。
可是又在StackOverFlow上发现了别人的问题。有人在尝试用printf输出string变量。
# include <iostream> int main()
{
using namespace std; string myString = "Press ENTER to quit program!";
cout << "Come up and C++ me some time." << endl;
printf("Follow this command: %s", myString);
cin.get(); return ;
}
提问者说“Each time the program runs, myString prints a seemingly random string of 3 characters...”
对这个问题,直接引用下面chris大神的回答。
It's compiling because printf isn't type safe, since it uses variable arguments in the C sense. printf has no option for std::string, only a C-style string. Using something else in place of what it expects definitely won't give you the results you want. It's actually undefined behaviour, so anything at all could happen.
The easiest way to fix this, since you're using C++, is printing it normally with std::cout, since std::string supports that through operator overloading:
std::cout << "Follow this command: " << myString;
If, for some reason, you need to extract the C-style string, you can use the c_str() method of std::string to get a const char * that is null-terminated. Using your example:
#include <iostream>
#include <string> int main()
{
using namespace std; string myString = "Press ENTER to quit program!";
cout << "Come up and C++ me some time." << endl;
printf("Follow this command: %s", myString.c_str()); //note the use of c_str
cin.get(); return ;
}
If you want a function that is like printf, but type safe, look into variadic templates (C++11, supported on all major compilers as of MSVC12). You can find an example of one here. There's nothing I know of implemented like that in the standard library, but there might be in Boost, specifically boost::format.
复制以上代码,在geany下编译的时候没有成功,提示error: ‘printf’ was not declared in this scope,果然加上#include <stdio.h>后编译成功。
由此可见,geany毕竟是一个轻量级的编程环境,main函数必须返回int之类的要求不知道是否是严谨性的体现。总之学习过程中用geany足矣,也希望能借此养成良好的编程习惯。
C++的学习记录 - 0的更多相关文章
- HTML5 学习记录——0
2015/08/19 HTML5的标签功能划分:基础.格式.表单.框架.图像.音视频.链接.列表.表格.样式.元信息.编程 1.HTML基础标题 <h1> - <h6>段落 & ...
- Apache Shiro 学习记录4
今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...
- Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...
- [Django]模型学习记录篇--基础
模型学习记录篇,仅仅自己学习时做的记录!!! 实现模型变更的三个步骤: 修改你的模型(在models.py文件中). 运行python manage.py makemigrations ,为这些修改创 ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
- Matlab 进阶学习记录
最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal = proposal_config('image_means', ...
- meta的学习记录
meta的学习记录 最近再学响应式的布局,就先来总结一下我们的viewport. 什么是viewport呢? 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(v ...
- [ZHUAN]Flask学习记录之Flask-SQLAlchemy
From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...
随机推荐
- Flask学习记录之Flask-Admin
相信用过Django框架的都不会忘记它强大的Admin功能,Flask-admin是一款能够与Django Admin所媲美的扩展,能够快速创建Web管理界面,实现了用户.文件增删改查等常用功能:也可 ...
- 关于自动编译iOS工程,生成app及ipa文件的方法-备
文章地址. 1.所需语句(可直接在命令行中执行) xcodebuild -configuration Release 进入所在工程的根目录文件夹,执行上面的语句,即可开始自动使用rele ...
- 改变VC生成exe图标
默认 VC 生成的 EXE 文件的图标很大众,可以根据以下办法修改 exe 的图标. 以 Visual C++ 6.0 为例: 1. 创建项目,添加代码,并且保证项目可以正常编译. 2. 为项目增加资 ...
- 磁珠(FB)的选用
1. 磁珠(FB)的单位是欧姆,而不是亨特,这一点要特别注意.因为磁珠的单位是按照它在某一频率 产生的阻抗来标称的,阻抗的单位也是欧姆.磁珠的 DATASHEET上一般会提供频率和阻抗的特性曲线图,一 ...
- 采购IC应该知道的十大网站
http://www.hcsindex.com (华强北指数网,查价格的)http://www.hqew.com (华强电子网,针对华强北市场)http://www.dzsc.com (维库电子 ...
- ECMAScript 5/6/7兼容性速查表
http://kangax.github.io/compat-table/es5/ 秒查ECMAScript在各大浏览器的兼容性,点击右上角按钮可以“在5/6/7/非标”之间切换.做JavaScrip ...
- IntelliJ IDEA: maven & jetty 开发 java web
之前使用eclipse + maven + jetty开发java web应用,本着no zuo no gain的想法, 折腾了一下Intellj idea下开发环境的搭建,顺带学习了maven re ...
- 针对portmap 的DDOS攻击
iptables -I INPUT -p tcp --dport 111 -j DROP iptables -I INPUT -s 10.171.254.221 -p tcp --dport 111 ...
- bzoj 1194
http://www.lydsy.com/JudgeOnline/problem.php?id=1194 我们看看怎么判断B是否是A的升级. 我们新建一个图G,每个点为一个二元组(i,j),表示A的i ...
- 程序员必备基础知识:通信协议——Http、TCP、UDP
CP HTTP UDP: 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务. TCP HTTP UDP三者的关系: TCP/IP是个协议组,可分为四个层次: ...