Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中填充字符*_C_Arrays - Fatal编程技术网

在C中填充字符*

在C中填充字符*,c,arrays,C,Arrays,这可能是一个非常简单的解决方案,但就我个人而言,我想不出来。我正在尝试创建一个char数组,这样一个char*由0到numlayers-1的数字组成,我将遍历它以访问轮到谁。所以,如果numPlayers=10,我希望gameState.players为[0,1,2,3,4,5,6,7,8,9]。我做错了什么 printf("How many players will be playing: "); scanf(" %d", &numPlayers); gameState.pl

这可能是一个非常简单的解决方案,但就我个人而言,我想不出来。我正在尝试创建一个char数组,这样一个char*由0到numlayers-1的数字组成,我将遍历它以访问轮到谁。所以,如果numPlayers=10,我希望gameState.players为[0,1,2,3,4,5,6,7,8,9]。我做错了什么

printf("How many players will be playing: ");
  scanf(" %d", &numPlayers);

  gameState.players = (char*) malloc(numPlayers * sizeof(char));

  for (int i = 0; i < numPlayers; ++i) {
    strcpy(gameState.players[i],(char) i);
  }
首先:

gameState.players = (char*) malloc(numPlayers * sizeof(char));
显式强制转换在C语言中是不明智的,它可以隐藏某些细微的错误,并且永远不需要sizeofchar的乘法——它总是一个

但真正的问题在于:

strcpy(gameState.players[i],(char) i);
str*函数用于处理以空结尾的C字符串字符数组。您没有字符串,而是有一个字符值,因此它应该更符合以下内容:

gameState.players[i] = i;
您还需要记住:


虽然您使用的是char变量,但输入的值不是数字的文本表示形式。要得到它,您需要使用i+'0'a。字符通常用于大多数可打印的内容,对于非字符数据,最好使用更具体的数据类型,如int或unsigned short`。 假设您想要文本表示,如果您使用的项目超过十项,那么这个方案将被严重破坏。 a字符7和“7”之间有很大的区别。前者的实际值为7 ASCII BEL,如果使用ASCII,则后者的值为0x37,假定为ASCII/Unicode


数字字符是唯一保证连续的字符,因此您只需添加“0”即可将数字值0..9转换为可打印字符值。

调用函数时请小心,您必须确保 使用正确的类型。如果您使用了不正确的,编译器将警告您 或者打印错误,您应该阅读编译器的警告和错误。他们 告诉你怎么了

strcpy用于复制字符串。函数的签名是

char *strcpy(char *dest, const char *src);
它需要一个指向char的指针作为目标,一个指向char的指针作为目标 来源strcpy还需要一个有效的C字符串。C字符串是一系列 以值“\0”结尾的字符字节。如果您没有有效的 字符串,不能使用strcpy

在很多方面都是错误的:

这些参数不是char的指针 您没有处理有效的C字符串 在这里施法对你没有帮助,你甚至施法错误。 1与“1”不同。角色“1”实际上是vakue 49 ASCII码。如果要获取数字的ASCII表示形式,您必须 要执行的操作:“0”位+位数。 你应该做:

for (int i = 0; i < numPlayers; ++i) {
    gameState.players[i] = '0' + i;
}

strcpygameState.players[i],char i;->玩家[i]=i;平均来说,这段代码的每一行都有问题。char数组不是char*您应该解释为什么要使用char数组。是因为您想为每个数字存储一个字符,还是因为您只想为每个数字使用一个字节?研究字符字符、字符串字符*、字节8位、字符和整数(如int)之间的差异。当你说[0,1,2,3,4,5,6,7,8,9]时,这些应该是数字还是数字?您是用0表示数字零还是数字零?others.sizeofchar也不需要,尽管它确实提供了自文档化代码。要实现这一点,您需要使用i+“0”。您能详细说明一下吗?@Ismael,您可能知道,在C.char ch=8中,char被视为数字类型;例如,将为您提供字符编号8,这恰好是退格。如果你想要一个看起来像两个圆圈的角色-你知道,这个->8@Heath,我认为最好只了解malloc是以字符形式工作的这一事实-那么没有乘法器的malloc就是您所需要的全部文档,而不是用不必要的gumpf阻塞代码:-@Ismael看看。查看字符“0”的ASCII值。它是48或0x30十六进制。当然,0的十进制值就是零。因此,要获取字符值“0”,请将“0”添加到数字中,以获取ASCII字符值,该值仅对单个数字0-9有效
for (int i = 0; i < numPlayers; ++i) {
    gameState.players[i] = '0' + i;
}
printf("How many players will be playing: ");
fflush(stdout);
scanf(" %d", &numPlayers);

if(numPlayers > 9)
{
    // error, do not continue
}

gameState.players = calloc(numPlayers + 1, sizeof *gameState.players);

for (int i = 0; i < numPlayers; ++i) {
    gameState.players[i] = '0' + i;
}