所以我想知道如何将实际字符存储到数组中。
char arr[4] = "sup!";
char backwards[4];
backwards[0] = *(arr + 3);
我想我的第二个问题是,如果我这样做,如果我使用 %c 提示 printf 向后 [0],会出现实际字符吗?
首先,让我们解决您的数组大小问题:
C 中的字符数组以空值结尾:这意味着您需要为尾随添加空间\0
来终止您的字符串。您可以char arr[5]
在第一行使用。(请注意,如果您绝对确定您永远不会将这个字符数组与任何 C 字符串处理函数一起使用,并且您将您的字符单独分配为字符而不是字符串,这在技术上不是必需的。但请自救一些调试时间并用完额外的字节。)这可能是你的“奇怪错误”的来源。
似乎您知道,但要记住的另一件事是在 C 中,数组是从零开始的。这意味着当你声明和数组 like 时char arr[4]
,你真的得到了
arr[0]
arr[1]
arr[2]
arr[3]
C 毫不犹豫地让您离开数组的末尾并踩踏数据或读取错误的值。这里是龙。当心。
现在,关于您的实际问题:
1)您使用单引号分配实际字符arr[2]='x';
如果使用双引号,则分配一个以空值结尾的 C 字符串,如前所述。
2)是的,printf
应该%c
可以解决问题。