C char*分配

Haa*_*nti 1 c pointers

我开始学习C,我想创建一个字符串.我正在使用的示例是这样做的:

char *c = malloc(2 * sizeof(char)); // 2

*c = 'A';
*c++ = 'B';

printf('%s', c); //doesn't print anything?
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,如何打印字符串AB?

Pau*_* Bu 11

通过这样做:*c++ = 'B';你增加了指针.这就是为什么printf不打印任何东西.

C和C++中的字符串需要以零字节(\x00)结尾.printf依靠这个来正常工作.正确的方法(关于你的代码)将是:

char *c = malloc(3 * sizeof(char)); // 2

*c = 'A';
*(c+1) = 'B';
*(c+2) = 0

printf("%s", c);
Run Code Online (Sandbox Code Playgroud)

这绝不是有效的.通常我们声明这样的文字字符串:

char *c = "ab";
Run Code Online (Sandbox Code Playgroud)

如果你想要了解指针是如何工作的.然后你的方法是一个很好的练习.只需了解一元运算++符递增应用的变量,因此,c在应用它之后,指针不会再指向字符串的开头.这*(c+1)就是你正在寻找的原因.