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