2025.7.27
看了好一会才理解了题目的意思
给出的三个整数不一定是按照ABC排序的, 所以我们要先排序, 排好序之后才对应ABC, 然后才能根据ABC或者其他排序的要求进行输出
写好之后运行出现问题, 我运行得到的是 0 3 5
后来发现是因为我字符串定义的是char regex[3], 是这里出了问题, 长度要定义为4
直接输入字符串需要定义为 char regex[4],但是
循环输入单个字符时可以定义为 char regex[3]
为什么直接输入 3 个字符需要定义为 char regex[4]
?
- 当你用
scanf("%s", regex)
输入字符串时,系统会自动在字符串末尾添加一个'\0'
作为结束符。 - 如果你需要存储 3 个有效字符(比如
"ABC"
),实际需要的存储空间是:3 个字符 + 1 个结束符 '\0'
,共 4 个字节。 - 若定义为
char regex[3]
,输入 3 个字符时,'\0'
会被写到数组之外的内存,导致 缓冲区溢出(可能引发程序崩溃或数据错误)。
为什么循环输入单个字符时可以定义为 char regex[3]
?
- 如果你通过循环逐个输入字符(比如
for(i=0;i<3;i++) scanf("%c", ®ex[i])
),本质上是在操作 字符数组,而非 C 语言标准意义上的“字符串”。 - 这种情况下,你没有依赖
'\0'
作为结束标志,而是通过循环索引(i<3
)来控制字符数量,因此 3 个元素的数组刚好能存 3 个字符。
把这个改好之后就成功了