我正在编写一个程序,需要在 char
数组中存储一个字符。
我的问题是当我尝试写入 char 数组时,postion[0]
打印 postion[0]
+ position[1]
+ position[2]
,我只想获取 position[0]
处的字符。
这是我为了解决这个问题而编写的一个程序:
#include <stdlib.h>
#include <stdio.h>
int main()
{
char position[3] = { '\0', '\0', '\0'};
int Number;
int i;
for (i = 0; i < 3; i++)
{
printf_s("\n\nNumber-> ");
fflush(stdin);
scanf_s("%d", &Number);
position[Number - 1] = 'O';
}
printf("\n\n%s", &position[0]);
printf("\n\n%s", &position[1]);
printf("\n\n%s\n\n\n", &position[2]);
system("pause");
return 0;
}
我的错误是什么?
最佳答案
原因是您不仅打印该char
,而是打印整个“字符串”,例如
printf("%s\n", &position[0]);
与
完全相同printf("%s\n", position);
那么,
printf("%s\n", &position[1]);
相当于打印从第二个字符而不是第一个字符开始的字符串。
但这并不是代码中的真正问题,真正的问题是,当 Number == 3
时,您没有 null
终止符,从而导致以下任何一个中出现未定义的行为:无论 printf()
是有意为之还是由于您不了解 printf()
的工作原理以及每个说明符的作用而导致的错误,您都必须在使用之前仔细阅读文档使用任何功能。
要解决此问题,您只需打印实际字符即可。为此,您必须使用 %c
说明符而不是 %s
,如下所示
printf("%c\n", position[1]);
将打印数组的第二个元素。
我建议您修复的代码的其他问题是
在尝试访问数组之前检查
Number
的值,如果它足够大,您最终可能会出现无法解释的行为,或者它可能为负数,这也会是一个问题。检查
scanf_s()
的返回值,以确保您确实收到了来自用户的有效输入。不要在行首使用
\n
,因为这很尴尬,而且除非确实有必要,否则大多数程序员不会这样做。不要使用
system("pause")
,因为它只是一种处理 IDE 的非标准方法,这些 IDE 可能需要带有事件循环的 GUI 程序,而不是带有事件循环的命令行程序文本输出。
关于C Array char - 当我尝试写入位置 0 时,程序写入位置 0 和 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40655314/