C风格字符串

原创 2012年03月24日 12:12:33

字符串常量是存储在常量存储区(文字常量区),因此不能改变其值。

#include <iostream>

using namespace std;
int main(void)
{
    char *p="C++";
    *(p+1)='d';
    cout<<*p<<endl;
    char ch[]="c++";
    ch[0]='d';
    cout<<ch<<endl;
    return 0;

}

上述程序运行错误,指针p指向常量存储区,对其进行改变是非法的。p更准确的定义是const char *p=“C++”;

ch数组的存储空间被分配在栈中,因此可以对其进行改变。


使用strcat等会对字符串进行改变时的函数时要注意,参数中的char*,是否原本是const char*。如果原本是const char*,则会出现运行时错误。

#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
    char *p="andf";
    strcat(p,"sf");
    cout<<p<<endl;
    return 0;
}

上述程序编译通过,但是运行时出错。

#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
    char *p;
    strcat(p,"sf");
    cout<<p<<endl;
    p[0]='0';
    cout<<p<<endl;
    return 0;
}

上述程序可以正确运行,而且p所指向的字符串可以改变,证明p不是指向常量存储区。


使用strn版本的前提是,正确计算size。

#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
    char *p1="abcd",*p2="ad";
    char p4[1];
    strncpy(p4,p2,1);
    cout<<p4<<endl;
    return 0;
}



对于strncpy:No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.我们需要在cpy操作之后,显式的添加空字符。

#include <iostream>
#include <cstring>
using namespace std;
int main(void)
{
    char *p1="abcd",*p2="ad";
    char p3[5];
    strncpy(p3,p2,2);
    cout<<p3<<endl;
    return 0;
}

上述程序得到如下结果:


从结果可以看出我们需要在strncpy操作后加入p3[2]='\0';对应结果如下:


char[]数组在输入时,cin>>ch;和输入string相同,从第一个非空白字符开始,到下一个空白字符结束。


string类型可以通过c_str成员函数返回C风格字符串,它返回的指针指向const char类型的数组。c_str返回的数组并不保证一定有效,对string的 操作会改变返回的值。

#include <iostream>
#include <string>
using namespace std;
int main(void)
{
    string str("ajkdfj");
    const char *ch=str.c_str();
    cout<<ch<<endl;
    str="abcd";
    cout<<ch<<endl;
    return 0;
}

上述程序中,对str的改变同时也改变了ch指向的对象的值。

字符数组(C风格字符串)的初始化和赋值

字符数组的初始化方式变量的定义指的是:指明变量所属类型、变量名称、分配空间以及初始化其初始值的过程。可以看出,变量的初始化是变量的定义的一部分。除了const变量需要显示的初始化以外,如果变量定义的时...

C风格字符串与标准库类String 区别和转换

C风格字符串与标准库类String 区别和转换,数组与标准库类vector的区别和转换   C风格字符串可以说是以字符null结束的字符数组。 char *p=”here is a string”; ...

转换成C风格的char *字符串

转换成C风格的char *字符串     本来今天想写个心情博客,楠哥走了,自习结束了,但是写了半天也没有感觉,还是赶紧写点东西吧。简单的一个: String类提供了几个成员函数,用于将strin...

C++学习笔记(二)C风格字符串和string类区别和联系

一、概述 有时候在使用字符串时,总把C++的字符串类型和C风格的字符串混淆,或者独立为不同概念,为此特定查找资料,总结两者之间的区别和联系。如有错误,恳请指出。 二、C语言中的字符串 在C语言中...

补.从零开始学习C语言--C风格字符串

C语言中,没有string这种类型,C中字符串是被当做一种特殊的数组来处理的,一个以0结尾的字符数组: chars[5]="abcd"; //字符串以"\0"结尾 ,注意这里数组的长度是5,而不是4!...

C++ primer 4.3 C风格字符串--strcpy、strlen、strcpt之strcpy函数(下)

转载自 :http://www.cnblogs.com/chenyg32/p/3739564.html例子 4 在很多情况下,题目会要我们自己写一个strcpy 函数,而不是用标准库里面的已知str...

【C++ Primer每日一刷之八】之八 C 风格字符串

4.3 C 风格字符串 尽管 C++ 支持 C 风格字符串,但不应该在 C++ 程序中使用这个类型。C 风格字符串常常带来许多错误,是导致大量安全问题的根源。   在前面我们第一次使用了...

编写输出C风格字符串的汇编子程序

一、C语言是如何输出字符串的 为了更加清楚地说明这个子程序,先来说说如何在C语言中输出一个字符串。在C语言中,我们要输出一个字符串,通常可以这样做: char str[]="hello!"; prin...

【C++】学习笔记五——C-风格字符串

* C-风格字符串*字符串是存储在内存的连续字节中的一系列字符。C++处理字符串的方式有两种。第一种来自C语言,常被称为C-风格字符串(C-style string);另一种是基于string类库的方...
  • budf01
  • budf01
  • 2016年11月23日 14:41
  • 4435

C风格字符串及常用库函数总结

我们知道字符串字面值的类型就是字符串常量的数组,即const char类型的数组。 C++从C语言里继承下来的一种通用结构是C风格字符串(C-style character string),而字符串字...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C风格字符串
举报原因:
原因补充:

(最多只允许输入30个字)