cout 输出字符串(指针)常见问题及put,write函数

C++ ostream类为下面的指针类型定义了插入运算符函数:

const signed char *;
const unsigned char *;
const char *;
void *;

C++用指向字符串存储位置的指针来表示字符串,指针的形式可以是char数组名,显式的char指针或用引号括起来的字符串。 下面是一个简单输出字符串的例子:

#include <iostream>
using namespace std;

int main()
{
    char name[] = "Kecily!";
    char *Name = "yuting";
    cout << name << endl;
    cout << Name << endl;
}

输出结果是:

Kecily!
yuting

看看下面这个例子可看出以下用法的区别:

#include <iostream>
using namespace std;

int main()
{
    char name[] = "Kecily!";
    char *Name = "yuting";
    cout << name << endl;
    cout << *Name << endl;
}

输出时,结果是:

Kecily!
y

解析: 因为字符串指针指向的是整个字符串的起始地址,代表的是整个字符串,而*Name指向的是这个字符串的第一个字符,所以输出的结果将是所指向字符串的第一个字符;

那如果我要输出指向这个字符串的指针的地址呢,也就是指针的值;

思路解析: 对于其他类型的指针,如果要对其地址的输出,直接输出其指针即可,但是对于字符串不一样,因为其本身的指针名代表了整个字符串,所以就需要用另外一种表示方法对其地址进行输出:

#include <iostream>
using namespace std;

int main()
{
    int m = 59;
    char *name = "yuting";
    cout << &m << endl;
    cout << (void *)name << endl;
}

另外介绍一下两种cout对象输出字符和字符串的另外两种方法,就是put和write,直接使用cout对象调用输出;

先说put吧, put适用于字符输出,但是也可以对整型数字进行输出,不过进行put调用输出后的整型数字就自动转换成了char型数字字符了,输出对应ASCII字符值;

而且哦,put还可以拼接输出哦,好强大!

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int i;
    string name = "Kecily";
    for(i=0; i<name.length()-1; i++) {
        cout.put(name[i]).put('-');    //对象调用输出,以及拼接输出;
    }
    cout.put(name[i]).put('\n');
}

输出结果:

K-e-c-i-l-y
#include <iostream>
using namespace std;

int main()
{
    int m = 67;
    cout.put(m).put('\n');
}

结果是: C

write函数的原型:

basic_ostream<charT, traits>& write(const char_type* s, streamsize n);

第一个参数为要显示的字符串的地址,第二个参数为要显示字符串的多少个字符;

这个函数有点奇怪,看一下例子吧:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    const char *str = "XiaoHui";
    int len = std::strlen(str);
    for(int i=1; i<=len; i++) { //注意喔,这里是从1开始喔;
        cout.write(str, i) << endl;
    }
    return 0;
}

如果注释处事从0开始的话,输出会跟预计的不一样;

运行结果:

X
Xi
Xia
Xiao
XiaoH
XiaoHu
XiaoHui

另外,write函数并不会在遇到空字符时自动停止打印字符,而是打印指定数目的字符:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    const char *s1 = "hello world!";
    const char *s2 = "bai bu chuan yang!";
    int len = std::strlen(s1);
    cout.write(s1, len+8) << endl;
}

输出:

hello world! bai bu
时间: 2024-10-12 11:42:47

cout 输出字符串(指针)常见问题及put,write函数的相关文章

cout输出字符串指针

先给出通过字符型指针输出字符串的示例代码,如下: #include <iostream>using std::cout;using std::endl; int main(){ const char *pszStr = "this is a string"; // 输出字符串cout << "字符串:" << pszStr << endl; // 显然不会输出地址值cout << "字符串起始地址

C++中cout输出字符串和字符串型指针地址值的方法以及C语言中的printf用法比较

#include <iostream> using namespace std; #include <stdio.h> int main() { char *pstr = "china"; char *qstr = "america"; char *q = "adf"; char * s; s = "hello"; printf("pstr = %p\n", pstr); /*输出为

C++中cout输出字符型指针地址值的方法

#include<iostream> #include<string> using namespace std; int main(){ char c[3]={'a','b','c'}; char *p=c; cout<<*p<<' '<<(void*)p<<endl; cout<<*(p+1)<<' '<<static_cast<void*>(p+1)<<endl; cou

c与c++中输出字符指针和字符串指针的问题

首先搞清楚在c语言中没有字符串的类型,所以对字符串操作,有两种形式:可以用字符指针,或者字符串数组(这里的指针变量c,系统会为其重新分配内存. c程序示例: 1  #include <stdio.h>  2   3 int main()  4 {  5   char *a="hello";  6   char b[]={'l','i','n','u','x'};  7   char *c=&b[1];  8   9    printf("%c\n"

编程题:用指针变量输出字符串

#include<stdio.h> void main() {  char *string="Hello"; printf("%s\n",string); } 字符串指针变量的介绍: 运行结果: 编程题:用指针变量输出字符串,布布扣,bubuko.com

字符串指针变量与字符数组的区别

使用字符串指针变量与字符数组的区别 (1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符.而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址.(2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同.例如: char str[ ] ="I am a student ! " ,s[200]; char *pc="You

char型字符串(数组)与string型字符串 指针与引用

一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指向常量的常指针: const int *const p;    //指针不可改变,且指针指向的数据也不可改变. 引用就是别名,定义引用的同时必须要对引用进行初始化. 二.利用引用返回多个值: 引用就是别名,引用必须要初始化. #include "stdafx.h" #include <

字符串指针数组,指向指针的指针

字符串指针数组,也即该数组中的每一项都是一个指向字符串的指针. 定义:char* s[3];即包含三个指针的数组,写成这种形式也可以更好的理解,即数组存的类型就是char*. 另外一点:数组名一般是指首地址,所以对该数组的第一个元素取地址&s[0],由于s[0]是指针,所以数组名也就是一个指向指针的指针,char** p=s; 那么对该数组的操作如下: int main() { char* a="hello!"; char* b="pangpang!"; c

字符串指针(char*)和字符数组(char [])区别

原文:http://www.blogbus.com/kavine-logs/29243638.html 今天在编写几个小函数的时候,半天调不通,长久不使用C++知识都快忘光了,赶紧拣些起来应付即将到来的应聘. void main(){    char* pStr1 = "Hello!";    char pStr2[] = "Hello!";    change(pStr1);    change(pStr2);}void change(char* pInstr){