C中的char[]与C++中的string
来源:互联网 发布:c语言代码表白玫瑰花 编辑:程序博客网 时间:2024/06/04 18:07
一直以来都是C和C++不分的混用(也主要是因为一直以来都没有写过什么程序。。。),今天在写一个反转输入字符串的小程序时,发现了格外多的bug,也着实学到了不少东西。起初是写的如下代码(片段):
#include <stdio.h>#include <string>#include <iostream>using namespace std;int main(){string s = "jack is a good boy!";printf("%s",s); return 0;}
刚开始都没有加以下语句:
#include <iostream>using namespace std;
后来即使加上了,也于事无补,编译器仍然报错:
warning: cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime
这个警告真心看不懂,Google说是printf()无法识别string定义的s,printf()是C的函数,可以用printf("%s",str);来打印字符串,但是无法识别string变量,因为C中没有定义string!
string是C++中才有的。string是一个类,具体请看这里。所以以上程序段改成这样就可以运行了:
#include <stdio.h>#include <string>#include <iostream>using namespace std;int main(){string s = "jack is a good boy!";cout >> s >> endl; return 0;}
那么,才C中怎么操作字符串呢?先来一个出错的:
#include <stdio.h>#include <string.h>int main(){char s[100];s[0] = "jack is a good boy!\n";printf("%s",s);return 0;}
这个时候编译器会报错:
warning: assignment makes integer from pointer without a cast
(警告:未经剪切将指针变为了整型)在Google了一阵之后,我发现后半部分(即“jack.....”)是一个指针,而s[0]需要的,是一个整数,所以这样的赋值是错误的,对s[0]的赋值应该是如下这种样子的:
s[0] = 'a';
但是想要对字符数组整个赋值怎么办?有两种办法,在建立数组时即赋值,或者,建立一个指针*ss,见如下代码:
#include <stdio.h>#include <string.h>int main(){char s[100] = "jack is a good boy!\n";char *ss;ss = "jack is a bad boy!\n";printf("%s",s);printf("%s",ss);return 0;}
这样就可以正常实现了。
在百度知道里见到了如下一种解决办法,可行:
#include <stdio.h>#include <string.h>typedef char* string;int main(){string ss;ss = "jack is a bad boy!\n";printf("%s",ss);return 0;}
就是通过语句
typedef char* string;自己定义一个string,可以实现以上功能。
- C++中的string与C中的char*
- C中的char[]与C++中的string
- C 语言中的char 与char*
- C++string与char*
- C++及C中的 string char指针及char数组
- C++及C中的 string char指针及char数组
- C++及C中的 string char指针及char数组
- C++及C中的 string char指针及char数组
- C++及C中的 string char指针及char数组
- C++及C中的 string char指针及char数组
- C/C++中的char*,const char*,string之间转换
- C++及C中的 string char指针及char数组
- JAVA中的char与C语言中char的区别
- C++ string 与 C char *
- 【C\C++】char[] 与 string 的转换
- C语言中的char类型
- c/c++中的string
- c中的string函数
- 引用与指针区别C++
- misc fiction 科幻小说中的五大鸡肋发明
- 路由器设置
- hdu-2816 I Love You Too
- poj 2528 Mayor's posters
- C中的char[]与C++中的string
- ASP.ENT GridView隔行变色
- extern "c"的作用
- 数据库表、字段的命名规范
- shortcut的创建和删除
- MYSQL数据库字段命名及设计规范
- java 的 反射机制的使用列子
- Spring第一个案例(10级学员 庞丽课堂总结)
- 学习OpenCV——HOG+SVM