mat*_*eek 2 c arrays pointers char
我想初始化任意大字符串.它是以null结尾的字符串,但我无法打印其内容.谁能告诉我为什么?
char* b;
char c;
b = &c;
*b = 'm';
*(b+1) = 'o';
*(b+2) = 'j';
*(b+3) = 'a';
*(b+4) = '\0';
printf("%s\n", *b);
Run Code Online (Sandbox Code Playgroud)
Oli*_*rth 10
您的解决方案调用未定义的行为,因为*(b+1)等等超出了堆栈变量的范围c.因此,当你写信给他们的时候,你写的是你不拥有的内存,这会导致各种各样的腐败.此外,您需要printf("%s\n", b)(printf期望指针%s).
解决方案取决于您想要做什么.您可以初始化指向字符串文字的指针:
const char *str1 = "moja";
Run Code Online (Sandbox Code Playgroud)
您可以初始化一个字符数组:
char str2[] = "moja";
Run Code Online (Sandbox Code Playgroud)
这也可以写成:
char str2[] = { 'm', 'o', 'j', 'a', '\0' };
Run Code Online (Sandbox Code Playgroud)
或者您可以手动分配字符串的值:
char *str3 = malloc(5);
str3[0] = 'm';
str3[1] = 'o';
str3[2] = 'j';
str3[3] = 'a';
str3[4] = '\0';
...
free(str3);
Run Code Online (Sandbox Code Playgroud)