Eat.随 发表于 2023-11-8 16:30:04

关于二维字符型数组的报错提示

我定义了一个二维字符型数组(如下图),程序可以正常运行,但是有小问题的报错(如下图)(猜测是书写不规范而导致的),但不知道如何更改

isdkz 发表于 2023-11-8 16:30:46

根据您提供的信息,我无法看到图像,但我可以尝试解答您的问题。

当涉及到二维字符型数组时,报错可能是由于以下几个原因导致的:

1. 数组越界:您可能尝试访问数组中不存在的索引位置。请确保您的索引值在合法范围内,即在数组的行和列的有效范围内。

2. 内存分配问题:如果您在声明数组时没有正确分配内存,或者在使用数组之前没有初始化数组的元素,那么可能会导致报错。请确保在使用数组之前,先分配足够的内存,并初始化每个元素。

3. 字符串末尾的空字符:在C语言中,字符串是以空字符 '\0' 结尾的。如果您在赋值字符串时忘记添加空字符,可能会导致报错。请确保在字符串的末尾添加空字符。

4. 数组名作为指针传递:在C语言中,数组名会被解释为指向数组首元素的指针。如果您将数组名作为参数传递给函数,并且在函数内部对数组进行修改,可能会导致报错。请确保在函数内部使用指针来操作数组。

如果您能提供更多的代码和报错信息,我将能够更准确地帮助您解决问题。

xiaotubie 发表于 2023-11-8 16:41:51

本帖最后由 xiaotubie 于 2023-11-8 16:44 编辑

你这每个元素是不是多输了一个字符啊,这个 '.' 点号前面好像还一个空格字符

Eat.随 发表于 2023-11-8 16:46:20

isdkz 发表于 2023-11-8 16:30
根据您提供的信息,我无法看到图像,但我可以尝试解答您的问题。

当涉及到二维字符型数组时,报错可能是 ...

代码:char board_now = {{' .',' .',' .'},{' .',' .',' .'},{' .',' .',' .'}};
报错信息:overflow in conversion from 'int' to 'char' changes value from '8238' to '46' [-Woverflow]gcc

Eat.随 发表于 2023-11-8 16:47:01

xiaotubie 发表于 2023-11-8 16:41
你这每个元素是不是多输了一个字符啊,这个 '.' 点号前面好像还一个空格字符

空格是包含在元素之内的

xiaotubie 发表于 2023-11-8 17:17:51

本帖最后由 xiaotubie 于 2023-11-8 17:46 编辑

Eat.随 发表于 2023-11-8 16:47
空格是包含在元素之内的

关键这样是错误的啊,单引号包含了2个字符了啊,而规定单引号里面只能有一个字符,你还是先去学习一下基础语法吧。{:5_99:}
你那个错误的提示:8238的十六进制是202E,ASCII编码的20表示空字符,2E表示.号,因为你将2个字符错误的写在了单引号里面,所以错误的组合成了202E,出来了一个奇怪的8238
而46的十六进制是2E, ASCII编码的2E是.号

Eat.随 发表于 2023-11-8 18:40:13

xiaotubie 发表于 2023-11-8 17:17
关键这样是错误的啊,单引号包含了2个字符了啊,而规定单引号里面只能有一个字符,你还是先去学习一下 ...

好的,我已经将那个空格删了,我会继续学习的。(还是个菜鸟)

不二如是 发表于 2023-11-9 10:57:20

问题就是:



由于字符数组 board_now 的元素被初始化为整数而不是字符。

在 C 语言中,字符使用单引号括起来表示,而不是使用双引号。

正确的初始化代码应该是这样的:

char board_now = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
将所有的 '.' 改为单引号包围的空格字符 ' '。

这样就可以正确地将字符数组初始化为空格字符了。
页: [1]
查看完整版本: 关于二维字符型数组的报错提示