嗨,我有以下程序。
char *x="abc";
*x=48;
printf("%c",*x);
这为我提供了输出a
,但我希望输出为0
。
修改 你可以建议我在运行时在
中存储数据char *x;
答案 0 :(得分:4)
您不能:尝试的行为是未定义。字符串@Input() FG: FormGroup;
是只读字面值(正式其类型为"abc"
)。
如果你写
const char[4]
然后 允许修改字符串。
答案 1 :(得分:1)
您不能(甚至尝试)修改string literal。它会导致undefined behavior。
您需要使用允许写入的内存。有两种方式。
将内存分配给指针x
(即,通过内存分配器方法将返回的指针存储到x
),然后这将是可写的,并使用{{1}复制字符串文字}。
strcpy()
或者,不是严格标准符合,而是更短, char * x = NULL;
if (x = malloc(DEF_SIZ)) {strcpy(x, "abc");}
。
strdup()
使用数组char *x = strdup("abc");
并使用字符串文字对其进行初始化。
x
在上述所有情况下,char x[] = "abc";
(或更确切地说,x
指向的内存位置)是可修改的。