C && C++ 易混淆问题

bug太多了,哭了啊,今天又修了一天,可算把搜索功能整好了,后续打算开发一个评论功能,看有没有精力吧zzz

字符串

在C++中,char str = "afefa"; 是一个不合法的语法。如果你想声明一个字符串,正确的方式是使用字符数组(C风格字符串)或者C++的std::string类。下面是两种合法的方式:

  1. 使用字符数组(C风格字符串):
1
char str[] = "afefa";

在这种情况下,编译器会在内存中分配足够的空间来存储字符串及其结尾的空字符(’\0’)。str 数组的大小将是字符串长度加上一个额外的字节来存储空字符。在这个例子中,str 的大小将是 6 字节(5 个字符 + 1 个空字符)。

内存结构示意图(每个方框代表一个字节):

1
2
3
+---+---+---+---+---+---+
| a | f | e | f | a | \0|
+---+---+---+---+---+---+

值得注意的是,这种写法目前已经被GCCban了,会报warning,我个人建议写成const char str[] = “…”,这样更符合常量字符串的定义。

  1. 使用std::string类:
1
2
3
#include <string>

std::string str = "afefa";

使用std::string类时,字符串的长度和内存管理由std::string类自动处理,你无需担心内存结构。std::string类会在需要时动态分配内存以容纳字符串。