int main() {
char a = 'b';
char* c = &a;
*c = 'a';
*(c+1) = 'j';
*(c+2) = '\0';
printf("%s\n", (char*)&a);
}
它会打印角色' a'和' j'但它打印垃圾,似乎忽略了空终止字符。
为什么?
答案 0 :(得分:3)
你做了什么导致未定义的行为,因为char指针c
没有指向能够存储你的字符串的内存块。
因此,当您将指针前进1或/和2时,您将访问与指针c
或a
指向的位置无关的内存,并且您将导致分段错误,或者访问程序已分配的内存,但这是随机和坏的。
你需要为a
(多少?2个字符,加上空终止符)分配空间,这会给你一个大小为3的字符数组。然后将指针c
设置为开头a
。现在,您可以使用c
进行指针运算,从0到2(数组大小为1),并通过指针分配所需的字符和空终止符。
#include <stdio.h>
int main() {
char a[3];
char* c = a; // set 'c' point to the start of the array 'a'
*c = 'a';
*(c+1) = 'j';
*(c+2) = '\0';
printf("%s\n", a);
}
AJ
答案 1 :(得分:-2)
因为你需要分配一个缓冲区,所以你不能只是拿一个指针写入那个地址。
我猜这是为了学习目的,因为你可以这样做:
char *a = "bj\0";
printf("%s\n", a);
如果你想追加字符,我强烈建议你使用std :: string。 否则,你必须做这样的事情:
char a[3]; // You need to allocate a defined size!
char* c = a;
*c = 'a';
*(c+1) = 'j';
*(c+2) = '\0';
printf("%s\n", (char*)&a);
或没有演员:
printf("%s\n", c);
抱歉,我没有编译,所以可能存在拼写错误。