c - 初始化 char 类型的数组

标签 c arrays pointers char

我想初始化任意大字符串。它是以空字符结尾的字符串,但我无法打印其内容。
谁能告诉我为什么?

char* b;
char c;
b = &c;
*b = 'm';
*(b+1) = 'o';
*(b+2) = 'j';
*(b+3) = 'a';
*(b+4) = '\0';
printf("%s\n", *b);

最佳答案

您的解决方案调用了未定义的行为,因为 *(b+1)等在堆栈变量的范围之外 c .因此,当您写信给他们时,您正在写遍您不拥有的内存,这可能会导致各种损坏。另外,您需要printf("%s\n", b) ( printf 需要指向 %s 的指针)。

解决方案取决于您想要做什么。您可以初始化指向字符串文字的指针:

const char *str1 = "moja";

您可以初始化一个字符数组:
char str2[] = "moja";

这也可以写成:
char str2[] = { 'm', 'o', 'j', 'a', '\0' };

或者您可以手动分配字符串的值:
char *str3 = malloc(5);
str3[0] = 'm';
str3[1] = 'o';
str3[2] = 'j';
str3[3] = 'a';
str3[4] = '\0';

...

free(str3);

关于c - 初始化 char 类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200667/

相关文章:

c++ - C 中指向 char 的指针的默认值

c - __memcpy_sse2_unaligned - 这是什么意思?

c - 为什么在 c 中打印字符串数组不提供相同的输出?

c - 如何将每个句子存储为数组的元素?

c - 将指针从一个函数传递到另一个函数

c++ - 从字符指针获取迭代器 (C++)

c - 隐式常量转换中的多字符字符常量和溢出

c - 保持 OCaml 值永远在堆外/故意泄漏 OCaml 值

java - 编写这个函数的更好方法是什么?

php - 使用 PHP 合并数组