【发布时间】:2020-03-01 04:20:58
【问题描述】:
我想我要疯了,因为我找不到解释为什么 C 会组合我的字符。
我给你们做了一个测试程序...
#include <stdio.h>
#include <stdlib.h>
int main()
{
char alphabet_big[26] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char alphabet_small[26] = "abcdefghijklmnopqrstuvwxyz";
printf("%s\n", alphabet_small);
return 0;
}
结果:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZV
为什么 C 结合了字母小和字母大?那没有意义。为什么字符末尾有一个“V”?
我希望有人可以为我提供这个“问题”的答案。
最好的问候。
【问题讨论】:
-
使用
char alphabet_big[] = ...。编译器会正确分配一个大小为 27 的数组。(不是 26) -
太短了一个错误...永远不要忘记将 array 视为 string 所需的
'\0'。 (堆栈也变小了,ABC...在顶部,然后是abc...)当您打印abc...no end-of-string 时,数组之间没有 nul-terminating 字符跟随'z'和printf愉快地继续打印字符,直到它不能再打印... -
未定义的行为,因为数组不是以 nul 结尾的,并且带有
%s的printf()假定传递了一个以 nul 结尾的数组。一组 26 个字母加上一个 nul 终止符要求数组至少有 27 个字符。遗憾的是,如果提供的数组不足以容纳初始化程序,则标准允许截断。